为什么程序终止了,单链表有错误范围求大佬帮帮忙

大彪不爱嚼米饭粒 2020-03-23 01:22:09

代码:
//Init初始化 初始化链表
//Build 创建一批新链表
//Insert 输入位置 输入要添加的数据
//Delete(Linklist *L,int i) i是删除的位置
//Updat(Linklist *L,int i,Type elem) i是位置 elem是要变更的数据
//length 求链表长
//Print 打印链表
//Search(Linklist *L,int elem) 查找链表中与输入数据相同的位置
#include <stdio.h>
#include <stdlib.h>
typedef int Type;
typedef int Status;
typedef struct node{
Type date; //数据域
struct node *next; //指针域
}Lnode,*Linklist;
Status Init(Linklist *L)
{
Lnode *H= (Linklist)malloc(sizeof(Lnode));
H->next = NULL;
printf("初始化成功");
return 1;
}
Status Build(Linklist *L) //尾插法
{
int n;
printf("想要创建的链表长度:\n");
scanf("%d",&n);
Linklist p,temp;
temp = (*L);
while(n>0)
{
p =(Linklist)malloc(sizeof(Lnode));
scanf("%d",&p->date);
p->next = NULL;
temp->next = p;
temp = p;
n--;
}
printf("链表创建成功");
return 1;
}
void length(Linklist L)
{
int sum;
while(L->next)
{
sum++;
L = L->next;
}
printf("%d",sum);
}
Status Insert(Linklist *L,int i,Type elem)
{
Linklist p;
p=(*L);
int j=0;
while(p&&i<j)
{
p=p->next;
j++;
}
if(p&&i==j)
{
Lnode *H = (Linklist)malloc(sizeof(Lnode));
H->date = elem;
H ->next= p->next;
p->next = H->next;
return 0 ;
}
}
Status Delete(Linklist *L,int i)
{
Linklist p = (*L);
int j=0;
while(p&&i<j)
{
p=p->next;
j++;
}
if(p&&i==j)
{
Linklist H;
H = p->next;
p->next =H->next;
free(H);
}
return 0;
}
Status Update(Linklist *L,int i,Type elem)
{
int j=1;
while(L&&j<i)
{
(*L) = (*L)->next;
j++;
}
if(L&&j==i)
{
(*L)->date = elem;
}
return 0;
}
Status Search(Linklist L,int i)
{
int j=1;
while(L&&j<i)
{
L = L->next;
j++;
}
if(i==j)
{
printf("%d",L->date);
}
return 0;
}
Status Print(Linklist L)
{
while(L)
{
printf("%d",L->date);
L = L->next;
}
return 0;
}

int main(void)
{
Linklist a;
Init(&a);
Build(&a);
Insert(&a,2,3);
Print(a);
Delete(&a,2);
Update(&a,2,4);
Print(a);
Search(a,3);
return 0;
}
...全文
29 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧