为了账号安全,请及时绑定邮箱和手机立即绑定

我的单链表的取值为什么总是1呀,还有按值查询,总get不到位置,为什么呀?

我的单链表的取值为什么总是1呀,还有按值查询,总get不到位置,为什么呀?

C
玉米浓汤 2018-10-25 21:44:18
#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 回答
  • 0 关注
  • 1012 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信