回 帖 发 新 帖 刷新版面

主题:[讨论]有关链表的问题

  今天仿照别人编写了一个链表的程序 包涵创建 插入 删除  输出 等函数 但是编译的时候有错误

麻烦各位帮忙解答修改  源码如下:
#include<stdio.h>
#include<malloc.h>


#define LEN sizeof(struct student )
#define NULL 0


struct student{
  long num;
  float score;
  struct student *next;


};


int n;


struct student* creat(void){
  struct student *head;
  struct student *p1;
  struct student *p2;


  n=0;
p2=(struct student *)malloc(LEN);
  p1=p2;
  scanf("%ld,%f",&p1->num,&p1->score);


  head=NULL;
  while(p1->num!=0){
   n=n+1;
   if(n==1) head=p1;
   else
  p2->next=p1;
   p2=p1;
   p1=(struct student *)malloc(LEN);
   scanf("%ld,%f",&p1->num,&p1->score);


  }
p2->next=NULL;


return(head);


}






void print(struct student *head){
   struct student *p;
   printf("now these %d records are :\n");


   p=head;
   if(head!=NULL)
  do{
    printf("%ld %5.1f",p->num,p->score);
p=p->next;


  }while(p!=NULL);




}




struct student *del(struct student *head,long num)
 {struct student *p1,*p2;
  if (head==NULL)
     {printf("\nlist null!\n");
      return(head);
     }
  p1=head;
  while(num!=p1->num && p1->next!=NULL)
     {p2=p1;p1=p1->next;}
  if(num==p1->num)
     {if(p1==head)head=p1->next;
 else p2->next=p1->next;
 printf("delete:%ld\n",num);
 n=n-1;
     }
  else printf("%ld not been found!\n",num);
  return(head);
}




struct student *insert(struct student *head,struct student *stud)
{struct student *p0,*p1,*p2;
 p1=head;                          //使p1指向第一个结点
 p0=stud;                          //指向要插入的结点
 if(head==NULL)                    //原来的链表是空表
 {head=p0;p0->next=NULL;}          //使p0指向的结点作为头结点
 else
 {while((p0->num>p1->num) && (p1->next!=NULL))
 {p2=p1;                       //使p2指向刚才p1指向的结点
  p1=p1->next;}                //p1后移一个结点
  if(p0->num<=p1->num)
  {if(head==p1) head=p0;        //插到原来第一个结点之前
   else p2->next=p0;            //插到p2指向的结点之后*/
   p0->next=p1;}
  else
  {p1->next=p0; p0->next=NULL;}}  //插到最后的结点之后
   n=n+1;                              //结点数加1
   return (head);
}






int main(){


  struct student* head,*stud;
stud=(struct student *)malloc(LEN);
long num=0;
  head=creat();


  head=insert(head,stud);
  head=del(head,num);
  print(head);
  return 0;


}

回复列表 (共2个回复)

沙发

学习学习啦。很不错的哦!




















You know some birds are not meant to be caged, their feathers are just too bright.
[url=http://www.2013freeshop.com/nike-free-run-2-men-c-41.html]nike free run 2[/url], [url=http://www.2013freeshop.com/nike-air-max-2012-men-c-60.html]air max 2012[/url], [url=http://www.2013freeshop.com/nike-free-run-3-men-c-62.html]nike free run 3[/url]

板凳

我试了一下,编译没有错误。

我来回复

您尚未登录,请登录后再回复。点此登录或注册