您好,欢迎访问三七文档
数据结构期中考试考试内容:把本学期中重要的程序合并在一个源程序中,通过菜单按钮选择调用不同的功能。具体要求:请模仿C语言课本P81页中的方法,编写一个菜单。需要合并的程序包括:1.顺序存储下实现的线性表基本操作(见ds-sqlist)2.链式存储下实现的线性表基本操作(见ds-slink)3.将X插入到一个有序(从小到大排序)的线性表(顺序存储结构)的适当位置上,并保持线性表的有序性。(见实验报告三,第3题)4.顺序结构线性表的就地逆置算法(见实验报告四,第3题的第1小问)5.顺序存储下实现的栈基本操作(见ds-sqstack)6.链式存储下实现的栈基本操作(ds-linkstack)7.判断输入字符串是否为“序列1&序列2”形式的回文(见实验报告五,第4题)8.顺序存储下实现的队列基本操作见(ds-sqqueue)9.链式存储下实现的队列基本操作见(ds-linkqueue)同学们写的菜单可以有如下形式:菜单部分功能的编写可参考下面的代码,其它函数以及case后面的语句请补充完整:#includestdio.h#includestdlib.h#includemalloc.h#defineMaxLen100/*顺序表的容量*/#defineMax20typedefintElemType1;typedefstruct{ElemType1data[MaxLen];/*存放顺序表的元素*/intlength;/*顺序表的实际长度*/}sqList;voidInitList(sqList*L)/*初始化线性表*/{L-length=0;}intGetLength(sqList*L)/*求线性表长度*/{returnL-length;}intGetElem(sqList*L,inti)/*求线性表中第i个元素*/{if(i1||iL-length)/*无效的i值*/{printf(error);exit(1);}returnL-data[i-1];}intLocate(sqList*L,ElemType1x)/*按值查找*/{inti=0;while(iL-length&&L-data[i]!=x)/*查找值为x的第1个结点*/i++;if(iL-length)return(i+1);/*未找到*/elsereturn(0);}voidInsElem(sqList*L,inti,ElemType1x)/*插入元素*/{intj;if(i1||iL-length+1)/*无效的参数i*/{printf(error);exit(1);}if(L-length==MaxLen){printf(overflow!);exit(1);}for(j=L-length;j=i;j--)/*将位置为i的结点及之后的结点后移*/L-data[j]=L-data[j-1];L-data[i-1]=x;/*在位置i处放入x*/L-length++;/*线性表长度增1*/}voidDelElem(sqList*L,inti)/*删除元素*/{intj;if(i1||iL-length){printf(不存在第%d个元素!,i);exit(0);}/*无效的参数i*/for(j=i;j=L-length-1;j++)/*将位置为i的结点之后的结点前移*/L-data[j-1]=L-data[j];L-length--;/*线性表长度减1*/}voidDispList(sqList*L)/*输出线性表*/{inti;for(i=1;i=L-length;i++)printf(%d,L-data[i-1]);printf(\n);}typedefintElemType2;typedefstructLNode{ElemType2data;/*数据域*/structLNode*next;/*指针域*/}LNode,*LinkList;LNode*head;voidInitList(LinkList*L)/*L为二级指针*/{*L=(LNode*)malloc(sizeof(LNode));/*创建头结点*L*/(*L)-next=NULL;}intGetLength(LinkListL)/*求线性表的长度*/{intnum=0;LNode*p;p=L-next;while(p!=NULL){num++;p=p-next;}returnnum;}LNode*GetElem(LinkListL,inti)/*求线性表中第i个元素*/{LNode*p;intpos=1;p=L-next;if(i1||iGetLength(L))exit(1);/*i参数不正确,返回*/while(posi)/*从第1个结点开始找,查找第i个结点*/{p=p-next;pos++;}returnp;/*返回位置*/}LNode*Locate1(LinkListL,intx)/*按值查找*/{LNode*p;p=L-next;while(p!=NULL&&p-data!=x)/*从第1个结点开始查找data域为x的结点*/p=p-next;returnp;}voidInsElem(LinkListL,inti,intx)/*插入结点*/{LNode*p,*q,*s;intpos=1;p=L;if(i1||iGetLength(L)+1)exit(1);/*i参数不正确,插入失败,退出*/s=(LNode*)malloc(sizeof(LNode));/*创建data域为x的结点*/s-data=x;while(pos=i)/*从头结点开始找,查找第i-1个结点*/{q=p;p=p-next;pos++;}s-next=q-next;/*将*s的next域指向*p的下一个结点(即第i个结点)*/q-next=s;/*将*q的next域指向*s,这样*s变成第i个结点*/}voidDelElem1(LinkListL,inti)/*删除结点*/{intpos=1;LNode*q=L,*p;if(i1||iGetLength(L)){printf(error\n);exit(1);}/*i参数不正确,插入失败,退出*/while(posi)/*从头结点开始,查找第i-1个结点,由q指向它*/{q=q-next;pos++;}p=q-next;/*由p指向第i个结点*/q-next=p-next;/*将*q的next指向*p之后结点,即从链表中删除第i个结点*/free(p);/*释放第i个结点占用的空间*/}voidDispList1(LinkListL)/*输出单链表*/{LNode*p;p=L-next;while(p!=NULL){printf(%4d,p-data);p=p-next;}printf(\n);}#defineMaxSize100typedefcharElemType3;typedefstruct{ElemType3data[MaxSize];/*保存队中元素*/intfront,rear;/*队头和队尾指针*/}SqQueue;voidInitQueue(SqQueue*SQ)/*qu为引用型参数*/{SQ-rear=SQ-front=0;/*指针初始化*/}intEnQueue(SqQueue*SQ,ElemType3x)/*入队运算,qu为引用型参数*/{if((SQ-rear+1)%MaxSize==SQ-front)/*队满*/{printf(\nQueueisfull!);return0;}SQ-rear=(SQ-rear+1)%MaxSize;/*队尾指针进1*/SQ-data[SQ-rear]=x;return1;}intEmpty(SqQueue*SQ)/*判断队空运算*/{return(SQ-rear==SQ-front)?1:0;}intOutQueue(SqQueue*SQ,ElemType3*x)/*出队运算,qu和x为引用型参数*/{if(Empty(SQ)){printf(\nQueueisfree!);return0;}SQ-front=(SQ-front+1)%MaxSize;/*队头指针进1*/*x=SQ-data[SQ-front];return1;}intGetHead(SqQueue*SQ,ElemType3*x)/*取队头元素运算,x为引用型参数*/{if(Empty(SQ)){printf(\nQueueisfree!);return0;}*x=SQ-data[(SQ-front+1)%MaxSize];return1;}typedefcharElemType4;#defineMaxSize100/*顺序栈的初始分配空间*/typedefstruct{ElemType4data[MaxSize];/*保存栈中元素*/inttop;/*栈指针*/}STACK;voidInitStack(STACK*s){s-top=-1;}intPush(STACK*S,ElemType4x)/*进栈运算,st为引用型参数*/{if(S-top==MaxSize-1){/*栈满*/printf(\nStackisfull!);return0;}/*栈不满*/S-top++;S-data[S-top]=x;return1;}intEmpty(STACK*S)/*判断栈空运算*/{return(S-top==-1?1:0);}intPop(STACK*S,ElemType4*x)/*出栈运算,st和x为引用型参数*/{if(Empty(S)){/*栈空*/printf(\nStackisfree!);return0;}/*栈不空*/*x=S-data[S-top];S-top--;return1;}intGetTop(STACK*S,ElemType4*x)/*取栈顶元素,x为引用型参数*/{if(Empty(S)){/*栈空*/printf(\nStackisfree!);return0;}*x=S-data[S-top];return1;}typedefcharElemType5;typedefstructqnode{ElemType4data;structqnode*next;}QTYPE;/*链队中结点的类型*/typedefstructqptr{QTYPE*front,*rear;}SQUEUE;/*链队类型*/voidInitQueue(SQUEUE*LQ)/*LQ为指针型参数*/{QTYPE*p;p=(QTYPE*)malloc(sizeof(QTYPE));p-next=NULL;LQ-rear=LQ-front=p;/*初始情况*/}intEnQueue(SQUEUE*LQ,ElemType5x)/*入队运算,lLQ为指针型参数数*/{QTYPE*s;s=(QTYPE*)malloc(sizeof(QTYPE));/*创建新结点,插入到链队的末尾*/s-data=x;s-next=LQ-rear-next;LQ-rear-next=s;LQ-rear=s;return1;}intEmpty(SQUEUE*LQ)/*判断队空运算*/{return(LQ-front==LQ-rear?1:0);}intOutQueue(SQUEUE*LQ,ElemType5*x)/*出队运算,LQ和x为指针型参数参数*/{QTYPE*p;if(Empty(LQ)){printf(\nQueueisfree!);return0;}p=LQ-front-next;*x=p-data;LQ-front-next=p-next;if(LQ-front-next==NULL)LQ-rear=LQ-front;free(p);r
本文标题:c语言期中考试
链接地址:https://www.777doc.com/doc-2908018 .html