数据结构C线性表现实
linearList.h
#ifndef _INC_STDIO_8787
#define _INC_STDIO_8787
#include <stdio.h>
#include <malloc.h>
#define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量
#define LIST_INCREMENT 10 // 线性表存储空间的分配增量
typedef int ElemType; // 数据元素的类型
typedef struct {
ElemType *elem; // 存储空间的集地址
int length; // 当前线性表的长度
int listsize; // 当前分配的存储容量
} LinearList;
int init_list(LinearList *list); //初始化线性表
void clear_list(LinearList *list);
void destroy_list(LinearList* list);
int list_empty(LinearList* list);
int list_length(LinearList* list);
void print_list(LinearList* list);
int locate_elem(LinearList* list, ElemType* x);
int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem);
int get_elem(LinearList* list, int index, ElemType* e);
int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem);
int insert_elem(LinearList* list, int index, ElemType* e);
int delete_elem(LinearList* list, int index, ElemType* e);
int append_elem(LinearList* list,ElemType* e);
int pop_elem(LinearList* list, ElemType* e);
void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);
void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c);
void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c);
#endif
linearList.c
#include "linearList.h"
int init_list(LinearList *list)
{
list->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if (!list->elem)
{
;
}
list->length = ;
list->listsize = LIST_INIT_SIZE;
;
}
void clear_list(LinearList *list)
{
list->length = ;
}
void destroy_list(LinearList* list)
{
free(list);
}
int list_empty(LinearList* list)
{
);
}
int list_length(LinearList* list)
{
return list->length;
}
int locate_elem(LinearList* list, ElemType* x)
{
;
int i;
; i < list->length; i++)
{
if (list->elem[i] == *x)
{
pos = i;
}
}
return pos;
}
int prior_elem(LinearList* list, ElemType* cur_elem, ElemType* pre_elem)
{
;
pos = locate_elem(list, cur_elem);
)
{
;
}
*pre_elem = list->elem[pos-];
;
}
int insert_elem(LinearList* list, int index, ElemType* e)
{
ElemType *q, *p;
|| index >= list->length)
{
;
}
if (list->length >= list->listsize)
{
ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(ElemType));
if (!newbase)
{
;
}
list->elem = newbase;
list->listsize += LIST_INCREMENT;
}
q = &(list->elem[index]);
]); p >= q; p--)
{
*(p+) = *p;
}
*q = *e;
++list->length;
;
}
int append_elem(LinearList* list,ElemType* e)
{
if (list->length >= list->listsize)
{
ElemType *newbase = (ElemType*)realloc(list->elem, (list->listsize + LIST_INCREMENT)*sizeof(int));
if (!newbase)
{
;
}
list->elem = newbase;
list->listsize += LIST_INCREMENT;
}
list->elem[list->length] = *e;
++list->length;
;
}
void print_list(LinearList* list){
int i;
; i < list->length; i++){
printf("%d \n", list->elem[i]);
}
}
int get_elem(LinearList* list, int index, ElemType* e){
|| index >= list->length) ;
*e = list->elem[index];
;
}
int next_elem(LinearList* list, ElemType* cur_elem, ElemType* next_elem){
;
pos = locate_elem(list, cur_elem);
|| pos == (list->length - )) ;
*next_elem = list->elem[pos+];
;
}
int delete_elem(LinearList* list, int index, ElemType* e)
{
ElemType *q, *p;
|| index >= list->length)
{
;
}
p = &(list->elem[index]);
*e = *p;
q = list->elem + list->length -;
for (++p; p < q; ++p)
{
*(p - ) = *p;
}
--list->length;
;
}
int pop_elem(LinearList* list, ElemType* e){
;
*e = list->elem[list->length - ];
--list->length;
;
}
void union_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //并集,C=A∪B
int i,a_length,b_length;
ElemType elem;
a_length = list_length(list_a);
b_length = list_length(list_b);
;i<a_length;i++){
get_elem(list_a, i, &elem);
append_elem(list_c,&elem);
}
;i<b_length;i++){
get_elem(list_b, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
void intersect_list(LinearList* list_a, LinearList* list_b, LinearList* list_c){ //交集,C=A∩B
int i,a_length;
ElemType elem;
a_length = list_length(list_a);
;i<a_length;i++){
get_elem(list_a, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
void except_list(LinearList* list_a,LinearList* list_b, LinearList* list_c){ //差集,C=A-B(属于A而不属于B)
int i,a_length;
ElemType elem;
a_length = list_length(list_a);
;i<a_length;i++){
get_elem(list_a, i, &elem);
){
append_elem(list_c,&elem);
}
}
}
index.c
#include "linearList.h"
void main() {
int i;
ElemType elem;
LinearList *list_a = (LinearList *)malloc(sizeof(LinearList));
LinearList *list_b = (LinearList *)malloc(sizeof(LinearList));
LinearList *list_c = (LinearList *)malloc(sizeof(LinearList));
init_list(list_a);
init_list(list_b);
init_list(list_c);
; i < ; i++){
append_elem(list_a,&i);
}
; i < ; i+=){
append_elem(list_b,&i);
}
print_list(list_a);
print_list(list_b);
pop_elem(list_a, &elem);
print_list(list_a);
printf("pop: %d \n",elem);
delete_elem(list_a, , &elem);
print_list(list_a);
printf("delete: %d \n",elem);
insert_elem(list_a, , &elem);
printf("insert: %d \n",elem);
print_list(list_a);
get_elem(list_a, , &elem);
printf("get elem at 5: %d \n",elem);
printf("locate : elem %d at %d \n",elem,locate_elem(list_a,&elem));
printf("list_a length : %d \n",list_length(list_a));
print_list(list_a);
print_list(list_b);
union_list(list_a,list_b,list_c);
print_list(list_c);
clear_list(list_c);
intersect_list(list_a,list_b,list_c);
print_list(list_c);
clear_list(list_c);
except_list(list_a,list_b,list_c);
print_list(list_c);
destroy_list(list_a);
destroy_list(list_b);
destroy_list(list_c);
}
数据结构C线性表现实的更多相关文章
- 用C#学习数据结构之线性表
什么是线性表 线性表是最简单.最基本.最常用的数据结构.线性表是线性结构的抽象(Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系.这种一对一的关系指的是数据元素之间的位置关 ...
- 数据结构之线性表(python版)
数据结构之线性表(python版) 单链表 1.1 定义表节点 # 定义表节点 class LNode(): def __init__(self,elem,next = None): self.el ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- 【PHP数据结构】线性表?顺序表?链表?别再傻傻分不清楚
遵从所有教材以及各类数据结构相关的书书籍,我们先从线性表开始入门.今天这篇文章更偏概念,是关于有线性表的一个知识点的汇总. 上文说过,物理结构是用于确定数据以何种方式存储的.其他的数据结构(树.图). ...
- javascript实现数据结构:线性表--简单示例及线性表的顺序表示和实现
线性表(linear list)是最常用且最简单的一种数据结构.一个线性表是n个数据元素的有限序列.在稍复杂的线性表中,一个数据元素可以由若干个数据项(item)组成. 其中: 数据元素的个数n定义为 ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- C 数据结构1——线性表分析(顺序存储、链式存储)
之前是由于学校工作室招新,跟着大伙工作室招新训练营学习数据结构,那个时候,纯碎是小白(至少比现在白很多)那个时候,学习数据结构,真的是一脸茫然,虽然写出来了,但真的不知道在干嘛.调试过程中,各种bug ...
随机推荐
- JDBC教程
JDBC代表Java与数据库的连接,这对Java编程语言和广泛的数据库之间独立于数据库的连接标准的Java API. JDBC库包含的API为每个通常与数据库的使用相关联的任务: 使得连接到数据库 创 ...
- 聊一聊Java的枚举enum
一. 什么是枚举 枚举是一种数据类型,具有集合的一些特点,可以存放多个元素,但存储对象有限且固定,枚举也有比较常见的使用场景,如我们需要表达性别(男.女),颜色(红.黄.蓝),星期(星期一.星期二.. ...
- 拉格朗日对偶性(Lagrange duality)
目录 拉格朗日对偶性(Lagrange duality) 1. 从原始问题到对偶问题 2. 弱对偶与强对偶 3. KKT条件 Reference: 拉格朗日对偶性(Lagrange duality) ...
- C语言tips_1 关于&& || ! 的优先级
关于&& || ! 三种操作的优先级 测试如下 简要分析 假设&&>|| 则结果为1 假设||>&& 则结果为0 结果为1 得证 & ...
- 二.Google黑客语法
搜索也是一门艺术! 说起Google,可谓是无人不知无人不晓,其强大的搜索功能,可以让你在瞬间找到你想要的一切.对于黑客而言,Google可是 一款绝佳的黑客工具.正因Google强大的检索能力,黑客 ...
- Spark 系列(十四)—— Spark Streaming 基本操作
一.案例引入 这里先引入一个基本的案例来演示流的创建:获取指定端口上的数据并进行词频统计.项目依赖和代码实现如下: <dependency> <groupId>org.apac ...
- MTFlexbox自动化埋点探索
1. 背景 跨平台动态化技术是目前移动互联网领域的重点关注方向,它既能节约人力,又能实现业务快速上线的需求.经过十年的发展,美团App已经变成了一个承载众多业务的超级平台,众多的业务方对业务形态的快速 ...
- tk.mybatis扩展通用接口
一.tk.mybatis已经为我们封装好了许多拆箱即用的通用mapper,但在实际的项目开发中想必不少小伙伴在数据库设计中都会采用逻辑删除这种方案,再去使用通用的mapper接口就不行了.这时候就需要 ...
- maven阿里云镜像setting
<?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...
- 【RabbitMQ】如何进行消息可靠投递【上篇】
说明 前几天,突然发生线上报警,钉钉连发了好几条消息,一看是RabbitMQ相关的消息,心头一紧,难道翻车了? [橙色报警] 应用[xxx]在[08-15 16:36:04]发生[错误日志异常],al ...