Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3519564
  • 博文数量: 534
  • 博客积分: 11595
  • 博客等级: 上将
  • 技术积分: 5785
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-22 17:00
文章分类

全部博文(534)

文章存档

2015年(4)

2014年(27)

2013年(15)

2012年(38)

2011年(36)

2010年(85)

2009年(63)

2008年(142)

2007年(124)

分类: C/C++

2007-07-06 10:04:56

输入5个学生的编号和成绩,输入0代表结束。
 
#include
#include
 
#define SIZE sizeof(struct student)  // 定义结构大小
#define STU struct student           // 定义宏
 
STU {
 long num;                        // num 学号
 float score;                     // 成绩
 STU *next;                       // 指针
};                              // 定义结构体
 
int n;                          // 全局变量,记录学生个数
 
STU *creat()                    // 建立案表
{
 STU *head,*p1,*p2;             // p1,p1用于定位
 head=NULL;                     // 初始为空
 n=0;
 p1=p2=(STU *)malloc(SIZE);     //开辟空间
 scanf("%ld,%f",&p1->num,&p1->score); // 输入数据
 while (p1->num != 0) {
  n=n+1;
  if (n==1) head=p1;
  else p2->next=p1;
  p2=p1;
  p1=(STU *)malloc(SIZE);
  scanf("%ld,%f",&p1->num,&p1->score);
 }
 p2->next=NULL;                 // 表尾的指针域为空
 return(head);                  // 返回表头
}

void print(STU *head)              //  输出数据 
{
 STU *p;
 printf("\nNow, These %d recores are:\n",n);
 p=head;
 if (head!=NULL)
  do {
   printf("%ld,%5.1f\n",p->num,p->score);
   p=p->next;
  } while(p!=NULL);
}

STU *del(STU *head,long del_num)    // 删除数据
{
 STU *p1,*p2;
 
 if (head==NULL) {printf("\nlist is null:\n"); goto end;}
 p1=head;
 while (del_num!=p1->num && p1->next!=NULL) {
  p2=p1;p1=p1->next;
 }
 
 if (del_num==p1->num) {
  if (p1==head) { head=p1->next; free(p1); }
  else { p2->next=p1->next; free(p1); }
  printf("delete :%ld\n",del_num);
  n=n-1;
 }
 else {
  printf("%ld not been found!\n",del_num);
 }
end:
 return(head);
}
 
STU *insert(STU *head,STU *newstu)  // 插入数据
{
 STU *p1,*p2,*newp;                 // p1,p2用于定位,newp是插入的数据
 p1=head;
 newp=newstu;
 if (head==NULL) { head=newp; newp->next=NULL; }
 else {
  while (newp->num>p1->num && p1->next!=NULL) {
   p2=p1;p1=p1->next;
  }
  if (newp->num<=p1->num) {
   if (p1==head) { head=newp; newp->next=p1;}
   else { p2->next=newp;newp->next=p1; }
  }
  else {
   p1->next=newp;newp->next=NULL;
  }
 }
 
 n=n+1;
 return(head);
}

void main()
{
 STU *head,*newstu;          // head-链表头,newstu-插入新节点
 long del_num;               // del_num 删除的学号
 
 printf("input recored: \n");
 head=creat();
 print(head);
 
 printf("\ninput delete: ");
 scanf("%ld",&del_num);
 while (del_num!=0) {
  head=del(head,del_num);
  print(head);
  printf("\ninput delete: ");
  scanf("%ld",&del_num);
 }
 
 printf("\ninput inseted:\n");
 newstu=(STU *)malloc(SIZE);
 scanf("%ld,%f",&newstu->num,&newstu->score);
 while (newstu->num!=0) {
  head=insert(head,newstu);
  print(head);
  printf("\ninput inseted:\n");
  newstu=(STU *)malloc(SIZE);
  scanf("%ld,%f",&newstu->num,&newstu->score);
 }
}
阅读(1479) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~