蘑油里 2018-10-03 15:26 采纳率: 0%
浏览 761
已结题

段错误,我要疯了,C语言数据结构

图片说明

所以问题出在哪里,我很菜,轻喷

附上完整代码

#include
#include
#include
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
#define ElemType int

typedef struct Node
{
ElemType data;
struct Node *next;
} Node,*LinkList;

void CreateTail(LinkList L);
int DelList(LinkList L,int i,ElemType e);
void Get(LinkList L,int i);
void InitList(LinkList *l);
int InsList(LinkList L,int i,ElemType e);
int ListLength(LinkList L);
void Locate(LinkList L,ElemType e);

void main()
{
LinkList k;
int m; //要查找的序号
int n; //要插入的位置
int t; //要删除的位置
char a; //要查找的元素
InitList(&k);
Node *p;
p=k->next;
printf("用尾插法建立单链表,请输入链表数据,以$结束!\n");

CreateTail(k);

while(p!=NULL)
{
    printf("%c\n",p->data );
    p=p->next;
} 

printf("请输入要查找的序号:");
scanf("%d",&m);
printf("查找到的元素是:");
Get(k,m);

printf("\n请输入要查找的元素:");
scanf("%c",&a);
Locate(k,a);

printf("\n请输入要插入的位置:");
scanf("%d",&n);
printf("插入的元素是:");
scanf("%c",&a);
InsList(k,n,a);
printf("插入后的链表是:");
p=k->next;

while(p!=NULL)
{
    printf("%c",p->data );
    p=p->next;
}

printf("\n请输入要删除的位置:");
scanf("%d",&t);


printf("删除的元素是:%c\n",a);
scanf("%c",&a);
DelList(k,t,a);
printf("删除后的链表是:");
p=k->next;

while(p!=NULL)
{
    printf("%c",p->data );
    p=p->next;
}
printf("\n链表的长度是:%d\n",ListLength(k));

}

void InitList(LinkList *k)
{
*k=(LinkList)malloc(sizeof(Node));
(*k)->next=NULL;
}

void CreateTail(LinkList L)
{
char c;
Node *r,*s;
int flag=1;
r=L;

while(flag)
{
    c=getchar();
    if(c!='$')
    {
        s=(Node*)malloc(sizeof(Node));
        s->data =c;
        r->next=s;
        r=s; 
    }
    else
    {
        flag=0;
        r->next=NULL;
    }
}

}

void Get(LinkList L,int i)
{
int j;
Node *p;
p=L;j=0;

while(p->next!=NULL&&j<i)
{
    p=p->next;
    j++;
}

if(i==j)
    printf("%c",p->data );
else
    printf("FALSE");

}

void Locate(LinkList L,ElemType e)
{
Node *p;
p=L->next;

while(p!=NULL)
if(p->data!=e )
    p=p->next;
else
break;
if(p->data ==e)
    printf("TURE");
else
    printf("FALSE"); 

}

int InsList(LinkList L,int i,ElemType e)
{
Node *pre,*s;
int k;
pre=L;k=0;

while(pre!=NULL&&k<i-1)
{
    pre=pre->next;
    k=k+1;
}

if(k!=i-1)
{
    printf("插入位置不合法!");
    return ERROR;
}

s=(Node*)malloc(sizeof(Node));
s->data =e;
s->next=pre->next;
pre->next=s;
return OK;

}

int DelList(LinkList L,int i,ElemType e)
{
Node *p,*r;
int k;
p=L;k=0;

while(p->next!=NULL&&k<i-1)
{
    p=p->next;
    k=k+1;
}

if(k!=i-1)
{
    printf("删除结点的位置不合法!");
    return ERROR;
}

r=p->next;
p->next=p->next->next;
e=r->data ;
free(r);
return OK;

}

int ListLength(LinkList L)
{
Node *p;
p=L->next;
int j=0;

while(p!=NULL)
{
    p=p->next;
    j++;
}

return j;

}

  • 写回答

1条回答

  • threenewbee 2018-10-04 02:03
    关注
    printf("\n请输入要查找的元素:");
    scanf("\n%c",&a); 这里要加上一个回车,否则a得不到输入
    
    下面还有几个地方类似
    
    还有
    printf("\n请输入要删除的位置:");
    scanf("%d",&t);
    printf("删除的元素是:%c\n",a);
    scanf("%c",&a);
    你这里输入了删除位置t,之后查找都不查找就输出a,a肯定不是删除的元素。
    
    下面的scanf又不知道是要输入什么
    
    程序就不仔细看了,建议你学会调试,知道下断点怎么看链表和输入变量的状态。建议你用visual studio,初学者不要用这种简陋的开发环境。
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月30日

悬赏问题

  • ¥15 前台报错,加我微信帮我解决一下,15043457399
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题