• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

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

#include
#include
#include
#include
//函数结果状态代码
#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&&jnext;
   ++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&&(jnext;++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)&&(jnext;++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;idata;
   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;idata;
   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->datadata)
        {
          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("输入有错误!");
        }
        }
}

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

建议:

  • 一般提问不要粘贴这么大段的代码
  • 如果粘贴代码,最好代码格式写的好点,这么一行一行的,很少有人愿意看这么一大段格式杂乱的代码
  • 将问题精简出来,再进行提问
  • 可以用编程的IDE的debug来单步查找定位下问题

使用道具 举报

发新帖

发布任务需求已有1031167位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!