会哭不会飞的小鸟 2019-10-21 15:23 采纳率: 0%
浏览 198

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

#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条回答

  • zqbnqsdsmd 2019-10-21 15:35
    关注
    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?