线性表之连续存储(数组)

来源:互联网 发布:大淘客cms要多久能过 编辑:程序博客网 时间:2024/06/05 19:54

经过一段忙碌的学习,今天总算有时间将数据结构C语言代码整理一下。

总的来说,这段时间还是很有收获的,原来根本写不出来的线性存储之连续存储(数组)篇可以完全自主的写出来了。

可能还有一些不熟悉,代码的健壮性也欠考虑。但万事开头难嘛。

如果哪里有错误或者不足的地方,希望各路路过的大神多多提点意见。

ADT List{  基本操作: InitList(&L) 操作结果:构造一个空的线性表L。ListEmpty(L)              初始条件:线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE。ListInsert(&L,i,e)  初始条件:线性表L已存在。操作结果:在L的第i个位置之前插入新的数据元素e,L的长度加1。 ListDelete(&L,i,&e)初始条件:线性表L已存在且非空。操作结果:删除L的第i个数据元素,并用e返回其值,L的长度增1。 }ADT List 


/*
目的:构造一个动态数组InitList(); 
作用:可完成append(追加)、ListDlete(删除)、ListInsert(插入)、show(显示)、判断空满等功能。                                                                                 
*/

                                                    ----参考 《郝斌数据结构自学视频》、《数据结构C语言版》(严蔚敏)

#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct Arrary{          //构造一个名为Arrary的结构体int *pBase;         //首地址 int len;//最大长度 int cnt;//有效长度 };/***********初始化数组*************/int InitList(struct Arrary *L, int length){L->pBase=(int *)malloc( sizeof(int) * length );if(L->pBase==NULL){printf("分配内存失败!\n");}else{L->len=length;L->cnt=0;}} /********判断是否为空**********/ bool is_empty(struct Arrary *L){if(L->cnt==0)return 1;else return 0;}/********判断是否为满*********/ bool is_full(struct Arrary *L){if(L->cnt==L->len)return 1;else return 0;}/*********追加操作*********/ int append(struct Arrary *L, int e){if(is_full(L)){printf("追加失败!\n");exit(-1);}else{L->pBase[L->cnt++]=e;}}/**********插入**************/ int ListInsert(struct Arrary *L, int pos, int e){if(pos<1||pos>L->cnt){printf("插入失败!\n");}else{printf("插入成功!\n");for(int i=L->cnt-1; i>=pos-1; i--){L->pBase[i+1]=L->pBase[i];}   L->pBase[pos-1]=e;L->cnt++;  }}/**********删除***********/ bool ListDelete(struct Arrary *L, int pos, int *e){if(pos<1||pos>L->cnt)  return 0;else{//printf("删除成功!\n");*e=L->pBase[pos-1];for(int i=pos; i<=L->cnt-1; i++){L->pBase[i-1]=L->pBase[i];}L->cnt--;    return 1;}}/**********显示***********/ void show(struct Arrary *L){if(L->cnt==0)printf("数组为空!\n");else{for(int i=0; i<L->cnt; ++i){printf("%d ",L->pBase[i]);}printf("\n");}}int main(){struct Arrary L;int e;InitList(&L,8);append(&L,1);append(&L,2);append(&L,3);append(&L,4);append(&L,5);append(&L,6);append(&L,7);show(&L);                    //显示进行追加后的数组 ListInsert(&L,4,99);         //插入操作 show(&L);                       if(ListDelete(&L,2,&e)){     //删除操作 printf("删除的元素是:---%d---\n",e);show(&L);}else printf("删除失败!\n");//while(1);}




0 0
原创粉丝点击