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

#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("输入有错误!");

        }

}

}


玉米浓汤
浏览 1016回答 2
2回答

慕设计2395807

LRBOCMVLBYOHKGWMCYUXHQCYOETXMDGPMFHKACSUDZJZFCYCLZCENKTGVSVYUKTISBHVKVDNCZVYOOXNDZWAWZCSCLIDTWTPFBLEURADMIQZIRJYFPFBKNWMCVRAWMPYUKAQRNCFOXGJRHKUQMILBETJLOGVXOEVKUDMJIFBXGXAJEAQSOKIYBYHXNVTWYIETJGDGWILUQMQMILBKWTQSPSVSOETKACRGDLIROQDMVXHYNWTWMWSOXADMCYOXVETCZVRGDZHVLAWZIGVFTPWFOLAKGQFIFHQLVYOKTWMPPSUSUETJLBCBRADHCMHRUXDXNRNPMOKNQADNDFCLODTDNDYOFVRTQGHZVYIWGVEUXAGJTIYBSBRNPYIRTXUJZUXGTJLBYUETPFHMDGVEBQTJFIRNBXNJTDZPXWTBXGOYUXAWTCLWSILHQLIBYGDFIQGQMWAWROZPYIXAPHPRHSVXUDGPBJLUXUPZPSHMORAXAPMVSOOQTPDGQGQMIZVRAJZPFIKGNISILIRGVFHAQUKBRHDTPLQTCFBEUVEBDIENDGWYWFBLNPZOEARHWFIZVRTVRADTPRMCFVRFBLNWTZVETWLHQZCECETIYBXTCYSBRGBFVEFUQGQFBRTPGVEADYNWLBPLVEAJHJFBRGCEHDZLIYZVRMCRNDWYIKAJSHKGWUQXUKUWFVENTDZOVYRBEXRTPRTPZIRAWQVYTPZVRAWSIBKFJFACFHXGRNCRNQSACZVYOQMBRBFVKAKODSIRNWYUQVLNWZVYOXTCCYHQNJLNQEAEZIENXMPXTPVXMCTPYIKTPNWYHKYACFORSUOSMSYBUWCJLADYBQTQZVPLHDRACYHDNAQZVDZCQMIRBVSOKTPSBQG

雪落无痕ol

建议:一般提问不要粘贴这么大段的代码如果粘贴代码,最好代码格式写的好点,这么一行一行的,很少有人愿意看这么一大段格式杂乱的代码将问题精简出来,再进行提问可以用编程的IDE的debug来单步查找定位下问题
打开App,查看更多内容
随时随地看视频慕课网APP