数据结构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 ...
随机推荐
- Linux基本操作及安装(部分)
1.分别用cat \tac\nl三个命令查看文件/etc/ssh/sshd_config文件中的内容, 并用自己的话总计出这三个文档操作命令的不同之处? [root@localhost ~]# c ...
- 【Java】Caused by: com.ibatis.sqlmap.client.SqlMapException: There is no statement named *** in this SqlMap.
如题: 可能原因: 在xxx.xml文件中有两个标签的id命名相同: DAO实现类方法中没有写对应xxx.xml的id名称: 实体映射文件xxx.xml未加入到sqlMap-Config.xml文件中 ...
- poj 1503 高精度加法
把输入的数加起来,输入0表示结束. 先看我Java代码,用BigINteger类很多东西都不需要考虑,比如前导0什么的,很方便.不过java效率低点,平均用时600ms,C/C++可以0ms过. im ...
- 百度网盘 人工智能书籍【Tensorflow和深度学习】
链接:https://pan.baidu.com/s/1ejCvwn08ILI2fMhBEdXR8w 提取码:6pk9
- 配置多个JDK存在的问题与解决方案 (亲测可用)
安装多个JDK时的技巧 (亲测可用) 我的电脑本来是JDK8的,后来的想在不同的JDK版本下测试JDK的垃圾回收器. 一开始的的思路是,先安装JDK,为每个JDK配置自己的家目录,然后在想用哪个版本的 ...
- 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误
非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...
- CentOS7使用yum安装ceph rpm包
1. 安装centos7对扩展repo的支持yum install yum-plugin-priorities保证下面的选项是开启的[main]enabled = 1 2. 安装 release.ke ...
- Docker:跨主机通信
修改主机docker默认的虚拟网段,然后在各自主机上分别把对方的docker网段加入到路由表中,配合iptables即可实现docker容器夸主机通信.配置方法如下: 设有三台虚拟机 v1: 10.1 ...
- JDK、JRE、JVM之间的区别和联系
JDK : Java Development ToolKit(Java开发工具包).JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工 ...
- 【React踩坑记一】React项目中禁用浏览器双击选中文字的功能
常规项目,我们只需要给标签加一个onselectstart事件,return false就可以 例: <div onselectstart="return false;" & ...