数据结构-线性表-顺序表操作

上传人:206****923 文档编号:37539855 上传时间:2018-04-18 格式:DOCX 页数:6 大小:23.70KB
返回 下载 相关 举报
数据结构-线性表-顺序表操作_第1页
第1页 / 共6页
数据结构-线性表-顺序表操作_第2页
第2页 / 共6页
数据结构-线性表-顺序表操作_第3页
第3页 / 共6页
数据结构-线性表-顺序表操作_第4页
第4页 / 共6页
数据结构-线性表-顺序表操作_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《数据结构-线性表-顺序表操作》由会员分享,可在线阅读,更多相关《数据结构-线性表-顺序表操作(6页珍藏版)》请在金锄头文库上搜索。

1、/说明:顺序表的操作,原始类型为结构体(成员有学号、姓名、性别和成绩),/8按号查找 12前驱 13后继有问题,恳请高人指点 /by 微笑的小魏 #include #include #include #define MAXSIZE 20 #define LIST_MAX_SIZE 3 typedef enum OVERFLOW=-2,ERROR=-1,FALSE=0,TRUE=1,OK=2Status; typedef struct int num; char name15; char sex; float score; ElemType;typedef struct ElemType *el

2、em; int length; int listsize; SeqList;Status InitList(SeqList *L);/初始化顺序表 void DisplayList(SeqList L);/输出顺序表 Status ListInsert(SeqList *L,int i,ElemType e);/在第i个位置插入元素 ElemType ListDeleteI(SeqList *L, int i);/按号删除第i个位置元素 int ListDeleteE(SeqList *L, char *item);/按值删除分量值为item的元素 int ListLength(SeqList

3、 L);/顺序表长度 int LocateElem(SeqList L,char *item);/按分量值查找第一个匹配的元素的序号 Status GetElem(SeqList L,int i,ElemType *e);/按号查找 void DestroyList(SeqList *L);/撤销顺序表 void ClearList(SeqList *L);/清空顺序表,置空 Status ListEmpty(SeqList L);/顺序表判空,空返回TRUE,否则返回FALSE ElemType* PriorElem(SeqList L,char *item);/item分量对应的元素的前驱

4、 ElemType* NextElem(SeqList L,char *item);/item分量对应的元素的前驱void main() SeqList test; ElemType s,*t; int select,i,r;char name20; t= do printf(“* 顺序表操作 *n“); printf(“* 1 初始化顺序表 *n“); printf(“* 2 输出顺序表 *n“); printf(“* 3 插入结点 *n“); printf(“* 4 按号删除结点 *n“); printf(“* 5 按值删除结点 *n“); printf(“* 6 顺序表长度 *n“);

5、printf(“* 7 按值查找 *n“); printf(“* 8 按号查找 *n“); printf(“* 9 撤销顺序表 *n“); printf(“* 10 清空顺序表 *n“); printf(“* 11 顺序表判空 *n“); printf(“* 12 求前驱元素 *n“); printf(“* 13 求后继元素 *n“); printf(“* 0 退出 *n“); printf(“请输入你的选择:“); scanf(“%d“,getchar();/因为涉及到字符类型的数据,故用getchar()来接 收回车 switch(select) case 1:if(InitList(el

6、se printf(“初始化成功!n“);break; case 2:DisplayList(test);break;/输出顺序表 case 3:printf(“请输入要插入的序号:“);scanf(“%d“,getchar();printf(“请分别输入要插入的元素:学号int,姓名char,性别char,成 绩floatn“);printf(“请输入要插入的元素:学号int:“);scanf(“%d“, getchar();printf(“请输入要插入的元素:姓名char*:“);gets(s.name);printf(“请输入要插入的元素:性别char:“);scanf(“%c“, ge

7、tchar();printf(“请输入要插入的元素:成绩float:“);scanf(“%f“, getchar();r=(int)ListInsert(if(r=-1)printf(“位置错,无法插入!n“);else if(r=-2)printf(“存储已满,无法插入!n“);else printf(“成功插入一个元素!n“);break; case 4:printf(“请输入要删除的结点序号:“);scanf(“%d“,getchar();s=ListDeleteI(if(strcmp(s.name,“位置错或空表“)=0)printf(“位置错或空表,无法 删除!n“);else pr

8、intf(“删除的是: %d,%s,%c,%5.2fn“,s.num,s.name,s.sex,s.score);break; case 5:printf(“请输入要删除的元素分量,姓名:“);gets(name);r=ListDeleteE(if(r=-1)printf(“空表,无法删除!n“);else if(r=-2)printf(“没有匹配的数据可以删除!n“);else printf(“删除的是第%d个元素!n“,r); case 6:printf(“当前链表的长度是:%dn“,ListLength(test);break; case 7:printf(“请输入要查找的成员值:“);

9、 gets(name);i=LocateElem(test,name);printf(“您要查找的元素是:%s“,name);if(i!=0) printf(“,该元素是链表中的第%d个元素!n“,i);else printf(“,该元素不在此链表中!n“);break; case 8:printf(“请输入要查找的序号:“); scanf(“%d“,getchar();if(GetElem(test,i,else printf(“查找的是第%d个元素,值是: %d,%d,%s,%c,%.2fn“,i,s.num,s.name,s.sex,s.score);break; case 9:Dest

10、royList(break; case 10:ClearList(break; case 11:if(ListEmpty(test)=TRUE)printf(“顺序表是空表!n“);else printf(“顺序表非空,当前有%d个元素!n“,test.length); case 12:printf(“请输入要查找前驱的元素分量,姓名:“);gets(name);t=PriorElem(test,name);if(!t)printf(“前驱是: %d,%s,%c,%.2fn“,t-num,t-name,t-sex,t- score);else printf(“值不在或无前驱!n“);case

11、13:printf(“请输入要查找后继的元素分量,姓名:“);gets(name);t=NextElem(test,name);if(!t)printf(“后继是: %d,%s,%c,%.2fn“,t-num,t-name,t-sex,t- score);else printf(“值不在或无后继!n“); case 0:printf(“程序已退出!n“);return; default:printf(“ 选择有误,请重新选择!n“); while(select!=0); /1初始化顺序表 Status InitList(SeqList *L) L-elem=(ElemType*)malloc(

12、MAXSIZE*sizeof(ElemType); if(!L-elem)return FALSE; L-length=0; L-listsize=MAXSIZE;return TRUE; /2输出显示遍历顺序表 void DisplayList(SeqList L) int i; printf(“输出当前顺序表:n“); printf(“序号 学号 姓名t 性别 成绩n“); for(i=0;i L - length + 1) return ERROR; /i值不合法,出错处理if (L - length = L-listsize) /当前存储空间满 return OVERFLOW;for

13、(j = L - length-1; j = i-1 ; j -) L - elem j + 1 = L - elemj;/第i个位置之后的元素依次向后移L - elemi-1 = e; /将e插入到第i个位置L - length+; /表长增1return TRUE; /4按号删除第i个位置元素 ElemType ListDeleteI(SeqList *L, int i) /在顺序表L中删除第i个数据元素,其中1iL-lengthint j;ElemType e;if (i L - length)strcpy(e.name,“位置错或空表“);return e; /i值不合法,出错处理e=

14、L-elemi-1;for (j = i; j length; j +)L - elemj - 1 = L - elemj; /第i个位置之后的元素依次向前移L - length -; /表长减1return e; /5按值删除 int ListDeleteE(SeqList *L, char *item) int i=0,j; if(L-length=0)return -1;/空表while(strcmp(L-elemi.name,item)!=0 if(i=L-length)return -2;/没有匹配 else for (j = i+1; j length; j +)L - elemj - 1 = L - elemj; /第i个位置之后的元素依次向前移L - length -; /表长减1 return i+1;/返回位序,下标加1 /6顺序表长度 int ListLength(SeqList L) return L.length; /7

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号