honglili_ya 2021-04-06 20:06 采纳率: 25%
浏览 20

数据结构求大神帮忙解答一下

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define  ERROR 0
typedef struct Lnode{
int data;    //数据域
struct Lnode *next;  //指针域
}Lnode,*Linklist;  //*Linklist为Lnode类型的指针

int   CreateList(Linklist L,int n)  //头插法
{
 Linklist p,q;
    p = L;//第一步,取到头结点,两个指针指向同一内存,改变p指向的内存,L指向的内存不变,L仍为头结点
    printf("请输入%d个数:\n", n);
    for (int i = 1; i <= n; i++)
 {
        q = (Linklist)malloc(sizeof(int));
        if (!p)
  {
            printf("p的初始化出现问题!\n");
            return 0;
        }
              scanf("%d", &q->data);
         q->next = p->next;//第二步链接两个结点
         p->next = q;//第二步链接两个结点
         p = q;//关键的一步,更换位置,进行下次循环

        }
        return 1;
 }

     int  ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
    {
     int j;
     Lnode *p;
     p=L;
     j=0;
     while(p->next&&j<i-1)//遍历并且进行第i-1个位置的查找
     {
         p=p->next;
         ++j;
     }
     if(!p||j>i-1)//如果找不到的话就返回error
     {
         return ERROR;
     }
     Lnode *S=(Linklist)malloc(sizeof(Lnode));
     S->data=e;
     S->next=p->next;
     p->next=S;
     }



     int ListDelete(Linklist *L,int i,int *e)//单链表的删除
     {
         int j;
         Lnode *p,*q;
         p=L;
         j=0;
         while(p->next&&j<=i-1)//寻找第i-1个元素
         {
             p=p->next;
             ++j;
         }
         if(!p||j>i-1)//删除位置不合理,找不到元素
            {
                return ERROR;
            }
            q=p->next;//删除并释放结点
            p->next=q->next;
            free(q);
     }

     Lnode *Locate(Linklist L,int i){    //按序号查找  定位
    int j=1;
    Lnode *p;
    if(i==0)
    {
        return L;
    }
    p=L->next;
    while((p!=NULL)&&(j<i))  // 判断是否在范围之内 因为从0开始所以小于i就行
    {
        p=p->next;
        j++;
    }
    if(j==i)
        return p;
    else
        return  NULL;//查找范围超过表长

}

int getLinklist(Linklist L){
   if(!L->next)
   {
       printf("链表没有节点,不能输出");
       return 0;
   }
   Linklist p;
   p=L->next;
   while(p!=NULL)
   {
       printf("%d ",p->data);
       p=p->next;
   }
   return 0;
}


int main()

{
    int a;
    Linklist *L=(Linklist*)malloc(sizeof(Lnode));
 printf("请问您想输入几个数:");
 scanf("%d",&a);
CreateList(L,a);

    int i,select;
  int *e;


printf("请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2,按序号查找请输入3,\n");
scanf("%d",&select);
if(select==1)
{
     printf("请输入想插入的位置和想插入的数");
    scanf("%d %d",&i,&e);
     ListInsert(L,i,e);
      getLinklist(L);
}
if(select==2)
{
    printf("请输入想删除的位置");
    scanf("%d %d",&i,&e);
    ListDelete(L,i,e);
     getLinklist(L);
}
if(select==3)
{
    scanf("%d",&i);
    Lnode *Locate(L,i);
     getLinklist(L);
}
    return 0;
}

为什么我的代码跑出来是无限循环一些别的数

  • 写回答

1条回答 默认 最新

  • Loup&卡普 2023-05-17 18:08
    关注

    e 需要定义为 int, 调用的时候 再取地址,不然 scanf &e 放置的是地址 不是值

    评论

报告相同问题?

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,