数据结构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 ...
随机推荐
- Java后台处理框架之struts2学习总结
Java后台处理框架之struts2学习总结 最近我在网上了解到,在实际的开发项目中struts2的使用率在不断降低,取而代之的是springMVC.可能有很多的朋友看到这里就会说,那还不如不学str ...
- 敏捷和DevOps:是敌是友?
DevOps是敏捷在软件开发团队的另一应用.那么相比之下,哪个更胜一筹? 一边,有业界认可的scrum master,它的朋友极限编程者,以及由其衍生的 LeSS.SAFe.DAD等,是敏捷. 另一边 ...
- HTML 第4章初始CSS3
什么是CSS? CSS全称为层叠样式表,通常又称为风格样式表. 引用CSS样式: 语法: <h1 styske="color:red;">style属性的应用</ ...
- 0R电阻在PCB布线中对布线畅通的一个小妙用
在PCB布线中,我们都会尽量节约板子空间,将元器件排布的紧密一些,难免会遇到布线不通的时候. 博主下面就来说一个关于0R电阻在PCB布线使之畅通的一个小妙用. 使用0R电阻前 假设我们这个TXD的线周 ...
- Hadoop 系列(八)—— 基于 ZooKeeper 搭建 Hadoop 高可用集群
一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求 ...
- 从原理层面掌握@RequestAttribute、@SessionAttribute的使用【一起学Spring MVC】
每篇一句 改我们就改得:取其精华,去其糟粕.否则木有意义 前言 如果说知道@SessionAttributes这个注解的人已经很少了,那么不需要统计我就可以确定的说:知道@RequestAttribu ...
- 转载 | Sublime Text3 安装以及初次配置
本文引自:http://blog.csdn.net/u011272513/article/details/52088800 工具:官网下载:Sublime Text3 安装:直接运行安装.http:/ ...
- Kotlin的特性
time streams try-with-resources 函数扩展,给types.classes或者interfaces新增方法 null safe 不需要new,后缀声明类型 自动转换有get ...
- Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(集群版)
上篇文章Zookeeper_阅读源码第一步_在 IDE 里启动 zkServer(单机版)讲了在 idea 里以单机的方式启动zookeeper,这篇介绍一下以集群的方式启动. 集群方式启动,才会真正 ...
- java学习笔记(中级篇)—JDK动态代理
一.什么是代理模式 相信大家都知道代理商这个概念,在商业中,代理商无处不在.假设你要去买东西,你不可能去找真正的厂家去买,也不可能直接跟厂家提出需求,代理商就是这中间的一桥梁,连接买家和厂商.你要买或 ...