为什么我的插入、删除、计数出错,小白需要大神帮改下

#include
#include
#define L sizeof(struct Linklist)
struct Linklist
{
int date;
struct Linklist *next;//定义了一个指向struct linklist类型数据的指针变量next,用来存放结点的地址。
};

struct Linklist *creat();
void print (struct Linklist );
void insert(struct Linklist ,int i,int x);
void delet(struct Linklist ,int i);
int GetElem(struct Linklist ,int i);
int jishu(struct Linklist *head);

struct Linklist *creat()//定义creat函数,指针类型,所以函数带回一个指针量
{

printf("请输入链表数据:");
struct Linklist *head,*p,*p1;
head=(struct Linklist*)malloc(L);
head->next=NULL;
head=p=p1=(struct Linklist*)malloc(L);
scanf("%d",&p->date);
int n=1;
while(p->date!=0)
{
    p=(struct Linklist*)malloc(L);
    scanf("%d",&p->date);
    p1->next=p;
    p1=p;
    n++;
 } 
 p->next=NULL;
 return(head);

} //建立链表

void print (struct Linklist *head)// struct Linklist *head是定义一个结构体指针变量head
{
struct Linklist *p;
printf("链表数据为:");
p=head;
while(p->date!=0)
{
printf("%d ",p->date);
p=p->next;
}
printf("\n");
return;
}//输出链表

void insert( struct Linklist *head,int i,int x)
{
int j=1;
struct Linklist *p,*r;
p=head;
while(p&&j {
p=p->next;
j++;
}
if(!p||j>i)
printf("插入出错!");
r=(struct Linklist *)malloc(L);
r->date=x;
r->next=p->next;
p->next=r;
}//在第i个位置之前插入数据x

void delet(struct Linklist *head,int i)
{
int j=1;
struct Linklist *p,*r;
p=head->next;
while(p&&j {
p=p->next;
j++;
}
if(!p||j>i-1)
printf("删除出错!");
r=p->next;
p->next=r->next;
free(r);
}//删除第i个位置上的数据

int GetElem(struct Linklist *head,int i)
{
int j=1,e;
struct Linklist *p;
p=head->next;
while(p&&j {
p=p->next;
j++;
}
if(!p||j>i)
printf("查找出错!");
e=p->next->date;
return(e);

}//查找第i个位置上的数据是多少,并赋值给e

int jishu(struct Linklist *head)
{
int n=0;
struct Linklist *p;
p=head;
while(p->next!=NULL)
{
n++;
p=p->next;
n++;
}
return(n);

}//计数,链表的个数

int main()
{
int m,n,k,h,e,o;
struct Linklist *head;

printf("请选择您要做的操作:\n1.建立链表\n2.输出链表\n3.给链表中插入数据\n4.删除链表中的数据\n5.查找链表中的数据\n6.链表中的数据计数\n\n");

head=creat();          

print (head);          

printf("请输入插入的位置和插入的数据");//调用插入函数
        scanf("%d,%d",&m,&n);
        insert(head, m, n);
        print(head);
        printf("\n");

printf("请输入要删除的数据的位置");//调用删除函数
       scanf("%d",&k);
       delet( head, k);
       print(head);
       printf("\n");
printf("请输入要查找数据的位置");//调用查找函数
        scanf("%d",&h);
        e=GetElem( head,h);
        printf("要查找的数据的位置在第%d个\n",&e);


o=jishu( head);
printf("链表中的数据有%d个\n",&o);






return 0;

}

1个回答

weixin_45778199
会哭不会飞的小鸟 可以详细点吗?小白表示不懂
9 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐