#include<stdio.h>#include<conio.h>#include<stdlib.h>#include <malloc.h>//函数结果状态代码#define OK 1#define ERROR 0#define OVERFLOW -2//Status是函数返回值类型,其值是函数结果状态代码typedef int Status;//ElemType是线性表数据元素类型,本程序处理整型数据typedef int ElemType;//定义typedef struct LNode{ ElemType data; struct LNode *next;}LNode,*LinkList;//初始化Status InitList(LinkList &L){ L=new LNode; L->next=NULL; return OK;}//取值Status GetElem(LinkList L,int i,ElemType &e){ int j; LinkList p=L->next; j=1; while(p&&j<i) { p=p->next; ++j; } if(!p||j>i)return ERROR; e=p->data; return OK;}//按值查找LNode *LocateElem(LinkList L,ElemType e){ LinkList p=L->next; while(p&&p->data!=e) p=p->next; return p;}//插入Status ListInsert(LinkList &L,int i,ElemType e){ int j; LinkList p=L;j=0; while(p&&(j<i-1)) {p=p->next;++j;} if(!p||j>i-1) return ERROR; LinkList s=new LNode; s->data=e; s->next=p->next; p->next=s; return OK;}//删除Status ListDelete(LinkList &L,int i){ LinkList p=L;int j=0; while((p->next)&&(j<i-1)) {p=p->next;++j;} if(!(p->next)||(j>i-1)) return ERROR; LinkList q=p->next; p->next=q->next; delete q; return OK;}//前插法创建单链表void CreateList_H(LinkList &L,int n){ L=new LNode; L->next=NULL; for(int i=0;i<n;++i) { LinkList p=new LNode; int cin; cin=p->data; p->next=L->next;L->next=p; }}//后插法创建单链表void CreateList_R(LinkList &L,int n){ L=new LNode; L->next=NULL; LinkList r=L;for(int i=0;i<n;++i) { LinkList p=new LNode; int cin; cin=p->data; p->next=NULL;r->next=p; r=p; }}//两个有序单链表的合并void MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC){ LinkList pa=LA->next; LinkList pb=LB->next; LC=LA; LinkList pc=LC; while(pa&&pb) { if(pa->data<=pb->data) { pc->next=pa; pc=pa; pa=pa->next; } else { pc->next=pb; pc=pb; pb=pb->next; } } pc->next=pa?pa:pb; delete LB;}//单链表的遍历void Printout(LinkList L){ LinkList L1=L->next; while(NULL!=L1){ printf("%d",L1->data); L1=L1->next; } printf("\n"); return ;}//单链表的释放void DestroyList(LinkList &L){ LinkList p; while(NULL!=L) { p=L; L=L->next; free(p); } return;}void main(){ LinkList MyList; int i; ElemType e; int c; while(true) { printf("------------单链表的基本操作操作----------\n"); printf("--------------1.单链表的初始化---------------\n"); printf("--------------2.单链表的取值------------------\n"); printf("--------------3.单链表的按值查找---------------------\n"); printf("--------------4.单链表的插入------------------\n"); printf("--------------5.单链表的删除---------------------\n"); printf("--------------6.前插法创建单链表---------------------\n"); printf("--------------7.后插法创建单链表---------------------\n"); printf("--------------8.两个有序单链表的合并------------------------------\n"); printf("--------------9.单链表的遍历------------------------------\n"); printf("--------------10.单链表的释放------------------------------\n"); printf("请输入要操作的步骤:\n"); scanf("%d",&c);switch(c) { case 1: if(InitList(MyList)==OK) { printf("链式表初始化成功!\n"); }else { printf("链式表初始化失败!\n"); }break; case 2: printf("\n请输入您需要取值的位置:\n"); scanf("%d",&i); if(GetElem(MyList,i,e)!=0) { printf("您需要取值的位置对应的值为"); printf("%d", GetElem(MyList,i,e)); printf("\n"); } else{ printf("取值失败\n"); } break; case 3: printf("\n请输入您需要查询的数据元素:\n"); scanf("%d",&e); if(LocateElem(MyList,e)) { printf("查询元素在第"); printf("%d", LocateElem(MyList,e)); printf("个位置\n"); } else{ printf("查询失败\n"); } break; case 4: printf("\n请输入您需要插入的数据以及它的位置:"); scanf("%d%d",&e,&i); printf("\n您需要插入的数据是%d\n您要插入的位置是:%d\n",e,i); if(ListInsert(MyList,i,e)) { printf("插入成功!\n"); printf("插入后的链表排序为:\n"); Printout(MyList); printf("\n"); } else{ printf("插入失败!\n"); } break; case 5: printf("\n请输入您需要删除元素的位置:"); scanf("%d",&i); if(ListDelete(MyList,i)) { printf("删除成功\n"); printf("删除后的链表为:\n"); Printout(MyList); printf("\n"); } else{ printf("删除失败\n"); } break; case 6: case 7: case 8: case 9: Printout(MyList); printf("\n"); break; case 10: DestroyList(MyList); break; case 11:exit(0); default:printf("输入有错误!"); } }}
2 回答
雪落无痕ol
TA贡献13条经验 获得超2个赞
建议:
一般提问不要粘贴这么大段的代码
如果粘贴代码,最好代码格式写的好点,这么一行一行的,很少有人愿意看这么一大段格式杂乱的代码
将问题精简出来,再进行提问
可以用编程的IDE的debug来单步查找定位下问题
- 2 回答
- 0 关注
- 1012 浏览
添加回答
举报
0/150
提交
取消