首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大家帮看看这个程序,关于链表的,该如何解决

2012-03-18 
大家帮看看这个程序,关于链表的这个程序主要实现1.链表的建立,链表的输入数据,插入(按学号升序),删除,但是

大家帮看看这个程序,关于链表的
这个程序主要实现1.链表的建立,链表的输入数据,插入(按学号升序),删除,但是在我下面有标准的地方出现了问题,提示是
[Error] C:\Users\lenovo\Desktop\p199-5链表的建立.c:36: incompatible types in assignment。
我想了好久了,没办法了问下大家,新手。

C/C++ code
#include<stdio.h>#include<stdlib.h>struct student{    int num;     float average;     struct student *next;};main(){    int i;    int x;    float y;    struct student *head=NULL,*p=NULL;    struct student *create();       // 链表的建立函数        struct student insert(struct student *p);     //链表的插入函数        struct student cancel(struct student *p);     //链表的删除函数        head=create();               //链表的创建     p=head;                 //由于下面的输入用到了head,所以用p保存开始的    for(i=0;i<8;i++)              //数据的输入        {printf("请输入学号:\n");        scanf("%d",&head->num);        printf("请输入平均成绩:\n");        scanf("%f",&head->average);        head=head->next;              };                p=insert(p);              //插入一个学生数据 ?????出现问题            for(i=0;i<9;i++)          //用来检测一下插入的数据行不行           {printf("%d,%f\n",p->num,p->average);            p=p->next;       };               p=cancel(head);   //出现问题?????????????            for(i=0;i<8;i++)          //用于检测一下删除的数据行不行           {printf("%d,%f\n",p->num,p->average);            p=p->next;       }}//链表的建立 struct student *create(){    int i=0;    struct student *head=NULL,*tail=NULL,*p=NULL;        for(i=0;i<8;i++)       {p=(struct student *)malloc(sizeof(struct student));        p->next=NULL;        if(i==0) head=tail=p;        else            {tail->next=p;            tail=p;           };        if(i==7) p->next=NULL;       };    return head;         //出现问题?????????}//插入一个学生数据 struct student insert(struct student *p){    int x;    int flag=0;    struct student *q=NULL,*temp=NULL,*head=NULL;        q=(struct student *)malloc(sizeof(struct student));    q->next=NULL;        printf("请输入这个加入学生的学号:\n");    scanf("%d",&q->num);    printf("请输入加入学生的平均成绩:\n");    scanf("%f",&q->average);        if(p->num>q->num) {head=q;head->next=p;} //判断是不是为第一个     else        {head=p;          while(flag==0)            {if(q->num>p->num)               {temp=p->next;                   p->next=q;                q->next=temp;                flag=1;                }             else p=p->next;            };        };    printf("加入学生成功!\n");    return head;}     //删除结点    struct student cancel(struct student *p){    int x;    int flag=0;    struct student *temp=NULL,*head=NULL;    printf("请输入需要删除的学生的学号:\n");    scanf("%d",&x);        if(p->num==x)  {head=p->next;free(p);}  //判断删除的是不是第一个     else        {head=p;          while(flag==0)              {temp=p;               if(p->next->num==x) flag=1;               else p=p->next;              };        };    printf("删除成功!\n");    return head; //出现问题????????????}


[解决办法]
struct student insert(struct student *p); //链表的插入函数
struct student cancel(struct student *p); //链表的删除函数

这两个函数的返回值类型应该是指针类型:struct student *

struct student cancel()
{
struct student *temp=NULL,*head=NULL;
return head;
}

main()
{
struct student *head=NULL,*p=NULL;
p=insert(p); //插入一个学生数据 ?????出现问题
p=cancel(head); //出现问题?????????????
}


很明显p的类型和insert、cancel函数的返回值类型都应该是指针类型。
而楼主程序中,无论是insert、cancel函数的声明和定义,返回类型都是struct student
都改成struct student*吧。

热点排行