l链表的综合操作

#define NULL 0
#define LEN sizeof(struct student)
struct student
{
 long num;
 long score;
 struct student *next;
};


main(){
 int j,listnum,delnum,n;
 int num1=1000,score1=2000;
 struct student *head,*p1,*p2;
 
 
 /*生成链表。。。*/
 printf("/nput in the length of the list: ");
 scanf("%d",&listnum);
 for(n=1;n<=listnum;n++){

  p1=(struct student*)malloc(LEN);
  p1->num=num1++; p1->score=score1++ ;

  if(n==1) head=p2=p1;
   else {p2->next=p1;p2=p1;}
 }
  p2->next=NULL;

  printf("head: %0x,last:%0x/n",head,p1);/*链表生成结束*/
  
  
  /*输出链表*/
  p1=head;
  printf("/nnow the new list is:/n");
  for(n=1;n<=listnum;++n,p1=p1->next){
   printf("/nn=%d,num=%ld,score=%ld/n",n,p1->num,p1->score);
  }
  
  /*删除一个节点*/
  p1=head;
  n=1;
  
  do{
   printf("/ndelete:put in the right order:from %d to %d/n",1,listnum);
   scanf("%d",&j);
  }while(j<1||j>listnum);/*从 1到listnum 有效*/
  
  
  while(n<j){/*查找第j个元素,当n等于j时,跳出循环*/
   p2=p1;p1=p1->next;++n;
  }
   
   if(j==1){
     head=p1->next;
     printf("the num:%ld,the score:%ld/n",p1->num,p1->score);
   }
   else{
    p2->next=p1->next;
    printf("/nyou have delete : num:%ld,  score:%ld/n",p1->num,p1->score);
    free(*p1);
   }
   --listnum;/*删除节点结束*/
  
   /*输出节点*/
   p1=head;
   printf("/nnow the new list is:/n");
   for(n=1;n<=listnum;++n){
   printf("/nn=%d,num=%ld,score=%ld/n",n,p1->num,p1->score);
   p1=p1->next;
  }
  
  
  /*插入一个节点*/
  
  do{
    printf("/n insert: put in the right order: from %d to %d/n",1,listnum+1);
   scanf("%d",&j);
  }while(j<1||j>listnum+1);/*从 1到listnum+1 有效*/
  
   p1=head;
   n=1;
   while(n<j){p2=p1;p1=p1->next;n++;}
  
   p1=(struct student*)malloc(LEN);
   p1->num=num1++;p1->score=score1++;
   if(j==1)
    {p1->next=head;head=p1;}
   else
    {p1->next=p2->next;p2->next=p1;}
    ++listnum;/*插入节点结束*/
   
  /*输出链表*/
  p1=head;
  printf("/nnow the new list is:/n");
  for(n=1;n<=listnum;++n ){
   printf("/nn=%d,num=%ld,score=%ld/n",n,p1->num,p1->score);
   p1=p1->next;
  }
   
  scanf("%d",&j);  
   
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值