动态链表的建立删除与增添

#include<stdio.h>
#include<stdlib.h>
#define len sizeof(struct student)
struct student{
 long int num;
 float score;
 struct student *next;
};
int n;
int main()
{
 struct student *creat();//制表 
 struct student *delete(struct student * ,int );//删除 
 struct student *add(struct student *,int );//添加 
 struct student *p1,*p2,*p3;
 int x1,x2;
 
 printf("输入学生的学号和成绩(中间空格分开):\n");
 p1=p2=p3=creat();
 do{
  printf("\nnum=%ld  score=%5.1f\n",p1->num,p1->score);
  p1=p1->next;
 }while(p1!=NULL);
 printf("输入要删除的位数:");
 scanf("%d",&x1);
 p2=delete(p2,x1); 
  do{
  printf("\nnum=%ld  score=%5.1f\n",p2->num,p2->score);
  p2=p2->next;
 }while(p2!=NULL);
 printf("输入要增添的位数:");
 scanf("%d",&x2);
 p3=add(p3,x2);
 do{
  printf("\nnum=%ld  score=%5.1f\n",p3->num,p3->score);
  p3=p3->next;
 }while(p3!=NULL);
 
 return 0;
}
struct student *creat()
{
 struct student *head,*p1,*p2;
 head=NULL;
 n=0;
 p1=p2=malloc(len);
 scanf("%ld %f",&p1->num,&p1->score);
 while(p1->num!=0){//输入学号为0代表终止制表 
  n++;
  if(n==1){
   head=p1;
  }else{
   p2->next=p1;
  }
  p2=p1;
  p1=malloc(len);
  scanf("%ld %f",&p1->num,&p1->score);
 }
 p2->next=NULL;
 return (head);
}
struct student *delete(struct student *p1,int x)
{
 struct student *p2,*head;
 head=p2=p1;
 n=0;
 do{
  n++;
  p1=p1->next;
  if(n>2){
   p2=p2->next;//p1与p2之间空出一格 
  }
  if(x==1){
   head=p1;
   break;
  }else if(x==n){
   p2->next=p1;
   break;
  }
 }while(1);
 return head;
}
struct student *add(struct student *p1,int x)
{
 struct student *p2,*p3,*head;
 head=p2=p1;
 n=0;
 p3=malloc(len);
 printf("/n输入要插入的学号与成绩:\n");
 scanf("%ld %f",&p3->num,&p3->score);
 n=1;
 do{
  n++;
   p1=p1->next;
  if(n!=2){
   p2=p2->next;//p1与p2紧挨 
  }
  if(x==1){
   head=p3;
   p3->next=p1;
   break;
  }else if(x==n){
   p2->next=p3;
   p3->next=p1;
   break;
  }
 }while(1);
 return head;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值