`
xinjiang
  • 浏览: 54540 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

对链表的综合操作

 
阅读更多
#include <stdio.h>
#include <string.h>
#include <malloc.h>
int count = 0;
struct Student
{
   char num[15];
   char name[30];
   int score;
   struct Student *next;
};

struct Student *Head;
struct Student *creatLink(void);
void insert(struct Student *head, int n);
void detel(struct Student *head);
void printLink(struct Student *head);

void menu()
{
    int choose, n;
    printf("----------------------------------------------------\n");
    printf("|                     菜单                         |\n");
    printf("|  1,输入学生成绩。                                |\n");
    printf("|  2,插入学生成绩。                                |\n");
    printf("|  3,删除学生。                                    |\n");
    printf("|  4,打印成绩表。                                  |\n");
    printf("|  0,退出。                                        |\n");
    printf("----------------------------------------------------\n");

    loop: scanf("%d", &choose);
    switch(choose)
    {
        case 0: system("exit");
                break;
        case 1: Head = creatLink();
                menu();
                break;
        case 2: printf("请输入在第几项插入元素:\n");
                scanf("%d", &n);
                insert(Head, n);
                menu();
                break;
        case 3: detel(Head);
                menu();
                break;
        case 4: printLink(Head);
                menu();
                break;
        default: printf("输入错误,请从新输入!!!\n");
                 goto loop;
                 break;
    }
}

struct Student *creatLink(void)
{
    struct Student *head, *stu, *linkTail;
    head = linkTail = NULL;
    stu = (struct Student*)malloc(sizeof(Student));
    printf("输入end结束:\n");
    printf("学号       姓名             成绩\n");
    scanf("%s", stu->num);
    while( strcmp("end", stu->num) )
    {
        scanf(" %s %d", stu->name, &stu->score);
        count++;
        if( head == NULL )
        {
           head = stu;
        }
        else
        {
           linkTail->next = stu;
        }
        linkTail = stu;
        stu = (struct Student *)malloc(sizeof(Student));
        scanf("%s", stu->num);
    }
    stu->next = linkTail->next = NULL;
    printf("成功创建成绩表,学生人数为:%d\n", count);
    return (head);
}

void insert(struct Student *head, int n)  //在链表的第n项后插入新的元素
{
    struct Student *linkTail, *linkInsert;
    int i = 1;

    count++;
    if( n > count )  n = count;

    printf("请输入插入学生的信息:\n");
    printf("学号       姓名             成绩\n");
    linkInsert = (struct Student*)malloc(sizeof(Student));
    scanf("%s %s %d", linkInsert->num, linkInsert->name, &linkInsert->score);

    if( n <= 0 || Head==NULL )
    {
       linkInsert->next = head;
       Head = linkInsert;
    }
    else
    {
        linkTail = head;
        while( i < n )
        {
           linkTail = linkTail->next;
           i++;
        }
        linkInsert->next = linkTail->next;
        linkTail->next = linkInsert;
        if( n >= count )  linkInsert->next = NULL;
    }
}

void detel(struct Student *head)
{
   struct Student *linkTail, *linkHead;
   if( head == NULL )
   {
      printf("成绩表为空,无可删除学生!!!\n");
   }
   else
   {
      linkHead = linkTail = head;
      count--;
      printf("请输入要删除学生的学号:\n");
      char num[15];
      scanf("%s", num);
      while( strcmp(linkTail->num, num)!=0 && linkTail->next!=NULL )
      {
         linkHead = linkTail;
         linkTail = linkTail->next;
      }
      if( strcmp(linkTail->num, num)!=0 )
         printf("对不起,没有查到学号为%s的学生,请检查是否输入有误。\n", num);
      else  printf("已成功删除学号为%s的学生信息。\n");

      if( head == linkTail )  Head = linkTail->next;
      else linkHead->next = linkTail->next;
   }
}

void printLink(struct Student *head)  //打印链表
{
   struct Student *last;
   last = head;
   printf("成绩表为:\n");
   printf("学号       姓名             成绩\n");
   while( last != NULL )
   {
      printf("%-10s%-20s%3d\n", last->num, last->name, last->score);
      last = last->next;
   }
   last = NULL;
}

int main()
{
   menu();
   return 0;
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics