数据结构——线性表

#include <stdio.h>  
#include <stdlib.h>  
  
#define TRUE 1  
#define FALSE 0  
#define OK 1  
#define ERROR 0  
#define INFEASIBLE -1  
#define OVERFLOW -2  
  
typedef int Status; //定义函数结果的状态码  
  
typedef int ElemType;  
  
//--------------线性表的动态分配存储结构-----------------------  
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量  
#define LISTINCREMENT 10 //线性表存储空间的分配增量  
  
typedef struct {  
ElemType * elem; //存储空间基址  
int length;  
int listsize; //当前分配的存储容量  
}SqList;  
  
  
//---------------顺序表的基本操作--------------------------------  
  
Status InitList(SqList &L);  
//操作结果:构造一个空的线性表L。  
  
Status DestroyList(SqList &L);  
//初始条件:线性表L已存在。  
//操作结果:销毁线性表L。  
  
Status ClearList(SqList &L);  
//初始条件:线性表L已存在。  
//操作结果:将L重置为空表。  
  
bool ListEmpty(SqList L);  
//初始条件:线性表L已存在。  
//操作结果:若L为空表,则返回TRUE,否则返回FALSE。  
  
int ListLength(SqList L);  
//初始条件:线性表L已存在。  
//操作结果:返回L中数据元素的个数。  
  
Status GetElem(SqList L, int i, ElemType &e);  
//初始条件:线性表L已存在,1<=i<=ListLength(L)。  
//操作结果:用e返回L中第i个数据元素的值。  
  
int LocateElem(SqList L, int e, bool (*equal)(ElemType, ElemType));  
//初始条件:线性表L已存在,compare()是数据元素判定函数。  
//返回L中第一个与e满足关系compare()的数据元素的位序。若这样的数据元素不存在,则返回值为0.  
  
Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e);  
//初始条件:线性表L已存在。  
//操作结果:若cur_e是L中的数据元素,且不是第一个,则用pre_e返回它的前驱,否则操作失败,pre_e无定义。  
  
Status NextElem(SqList L, ElemType cur_e, ElemType &next_e);  
//初始条件:线性表L已存在。  
//操作结果:若cur_e是L中的数据元素,且不是最后一个,则用next_e返回它的后继,否则操作失败,next_e无定义。  
  
Status ListInsert(SqList &L, int i, ElemType e);  
//初始条件:线性表L已存在,1<=i<=ListLength(L)+1.  
//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1.  
  
Status ListDelete(SqList &L, int i, ElemType &e);  
//初始条件:线性表L已存在且非空,1<=i<=ListLength(L).  
//操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1.  
  
Status ListTraverse(SqList L, bool (*visit)(ElemType));  
//初始条件:线性表L已存在  
//操作结果:依次对L的每个元素调用函数visit().一旦visit()失败,则操作失败。  
  void MergeList_Sq(SqList La,SqList Lb,SqList &Lc);
  
  
//---------------顺序表的功能实现---------------------------------  
Status InitList(SqList &L) //构造一个空的顺序表  
{  
L.elem=(ElemType*)malloc(LIST_INIT_SIZE* sizeof (ElemType));  
if (!L.elem) exit(OVERFLOW); //存储分配失败  
L.length=0; //空表长度为0  
L.listsize=LIST_INIT_SIZE; //初始存储容量  
return OK;  
}//InitList  
  
  
Status DestroyList(SqList &L) //线性表存在,销毁线性表  
{  
free(&L);  
return OK;  
}//DestroyList  
  
  
Status ClearList(SqList &L) //将L置为空表  
{  
L.length=0; //长度为0位空表  
return OK;  
}//ClearList  
  
  
bool ListEmpty(SqList L) //判断是否为空表,是返回true否返回false  
{  
if(!L.length) return TRUE;  
else  
return FALSE;  
}//ListEmpty  
  
  
int ListLength(SqList L) //返回线性表的长度即返回线性表数据元素个数  
{  
return L.length;  
}//ListLength  
  
  
Status GetElem(SqList L, int i, ElemType &e) //用e返回第i个元素的值  
{  
if (i<1||i>L.length) return ERROR; //判断输入是否合法  
e=L.elem[i-1];  
return OK;  
}//GetElem  
  
  
int LocateElem(SqList L, int e, bool (*equal)(ElemType, ElemType)) //返回L中第一个与e满足关系compare()的数据元素的位序  
{  
int i=1;  
while(i<=L.length && !(equal(L.elem[i-1],e))) ++i;  
if (i <= L.length) return i;  
else return 0;  
}//LocateElem  
  
  
Status PriorElem(SqList L, ElemType cur_e, ElemType &pre_e) //返回前驱  
{  
int i=1;   
while(i <= L.length && !(cur_e==L.elem[i-1])) ++i;   
if(i<2 || i>L.length)   
return ERROR;   
pre_e = L.elem[i-2];   
return OK;   
}//PriorElem  
  
  
Status NextElem(SqList L, ElemType cur_e, ElemType &next_e) //返回后继  
{  
int i=1;  
while(i <= L.length && !(cur_e==L.elem[i-1])) ++i;  
if(i>L.length-1)   
return ERROR;  
next_e = L.elem[i];  
return OK;  
}//NextElem  
  
  
Status ListInsert(SqList &L, int i, ElemType e) //在顺序表中第i个位置插入e,L的长度增加1  
{  
ElemType* p;  
ElemType* q;  
ElemType* newbase;  
if(i<1||i>L.length+1) return ERROR; //判断i的值是否合法  
if(L.length>=L.listsize)  
{  
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)* sizeof (ElemType));  
if (!newbase) exit(OVERFLOW);  
L.elem=newbase;  
L.listsize+=LISTINCREMENT;  
}  
q=&(L.elem[i-1]);  
for(p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p;  
*p=e;  
++L.length;  
return OK;  
}//ListInsert  
  
  
Status ListDelete(SqList &L, int i, ElemType &e) //删除第i个元素,并返回e  
{  
ElemType* p,*q;  
if(i<1||i>L.length) return ERROR;   
p=&(L.elem[i-1]);  
e=*p;  
q=L.elem+L.length-1;  
for(++p;p<=q;++p) *(p-1)=*p;  
--L.length;  
return OK;  
}//ListDelete  
  
  
Status ListTraverse(SqList L, bool (*visit)(ElemType)) //对L中每个元素调用函数visit  
{  
int i=1;  
while (i<=L.length && (visit(L.elem[i-1]))) ++i;  
return OK;  
}  

github代码:https://github.com//badcyc/dataStruct

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,397评论 2 45
  • 数据结构-线性表 @(数据结构) 线性表是数据结构中的逻辑结构。可以存储在数组上,也可以存储在链表上。 顺序表(数...
    Rayhaha阅读 582评论 0 2
  • 恩...今天寻觅也没有找我。我路过他的试室都眼睛都没敢偷瞥了。我...也不知道为什么?总之就...害怕。 ...试...
    小棉袄呀阅读 376评论 0 0
  • 1.晋景公病重时做一恶梦,巫师预言他吃不上当年的新麦了。挨到六月的一天,景公突然想吃麦饭,令人献上新麦,并召巫师来...
    黄善卓阅读 650评论 1 4
  • 她是一个风筝,等待着我的抓紧,等待着放飞。我抓紧了,却抓的太紧了,我想,在放飞一点,就一点,却发现她乘风飞的却越来...
    暮友阅读 347评论 0 0