数据结构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 ...
随机推荐
- Go语言圣经习题练习_1.5. 获取URL
练习 1.7: 函数调用io.Copy(dst, src)会从src中读取内容,并将读到的结果写入到dst中,使用这个函数替代掉例子中的ioutil.ReadAll来拷贝响应结构体到os.Stdout ...
- 《Scalable IO in Java》译文
<Scalable IO in Java> 是java.util.concurrent包的作者,大师Doug Lea关于分析与构建可伸缩的高性能IO服务的一篇经典文章,在文章中Doug L ...
- Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享
首发地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式环境下的Session共享. ...
- 《CSS3知识点》
一.引入样式 1.行内样式表 <h1 style="color: red;font-size: 18px;">10-30</h1> 2.内部样式表(在hea ...
- Chrome 使用 Evernote 插件
Chrome 插件不能登印象笔记进行裁剪,被困扰有段时间了.昨天偶然在知乎上找到了解决方法: 链接:https://www.zhihu.com/question/20340803/answer/291 ...
- UE4 打包详细流程
这两天试着把之前做的一个UE4项目在安卓机上运行下,于是乎有了下面的一个打包血泪史. 首先呢,肯定是下载好了UE的源码了,我用的是4.18. 安装步骤可以先参考下官方的教程http://api.unr ...
- mule发布调用webservice
mule发布webservice 使用mule esb消息总线发布和调用webservice都非常精简,mule包装了所有操作,你只需要拖控件配置就可以,下面讲解mule发布: 1.下面是flow,h ...
- java高并发系列 - 第21天:java中的CAS操作,java并发的基石
这是java高并发系列第21篇文章. 本文主要内容 从网站计数器实现中一步步引出CAS操作 介绍java中的CAS及CAS可能存在的问题 悲观锁和乐观锁的一些介绍及数据库乐观锁的一个常见示例 使用ja ...
- C#的委托事件总结
什么是委托?1.委托是C#中由用户自定义的一个类型.2.类表示的是数据和方法的集合,而委托实际上是一个能持有对某个或某些方法的引用的类.3.与其他的类不同,委托类能拥有一个签名,并且他只能持有与他的签 ...
- Starling 环形进度条实现
项目初期想实现这个效果来着,查了很多资料(包括式神的<神奇的滤镜>),也没找到完美的实现方法,,当时时间紧迫,就找了传统的进度条来代替实现. 最近偶然心血来潮,查了各方面资料,终于找到实现 ...