⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 数据结构的实验报告和课程设计报告及代码。
💻 CPP
字号:
#include<malloc.h>
#include<stdio.h>
#define TRUE 1
#define NULL 0
#define LEN sizeof(struct node)
/*定义结构体*/ 
typedef struct node
 {
  int ID;/*学生学号*/
  char name[20];/*学生姓名*/
  int maths;/*数学成绩*/
  int com;/*计算机成绩*/
  struct node *next;
 };
  int n;
  struct node *la;/*初始化链表*/  
 
  struct node *make()
	/*构造一个链表*/
    { 
        struct node *head;
        struct node *h,*p2;       
               n=0; 
        printf("\t\t\t请输入学生信息\n");
        h=p2=(struct node *)malloc(LEN);
              printf("请输入学号:\t");
        scanf("%d",&h->ID);      
        printf("请输入姓名:\t");
        scanf("%s",h->name);
        printf("请输入数学成绩:\t");
        scanf("%d",&h->maths);
        printf("请输入计算机成绩:\t");
        scanf("%d",&h->com);
            head=NULL;
        while (h->ID!=0)
              {
               n=n+1;
               if(n==1)head=h;
               else p2->next=h;
               p2=h;
               h=(struct node *)malloc(LEN);
         printf("请输入学号:\t");
        scanf("%d",&h->ID);         
        if(h->ID==0)break;
        printf("请输入姓名:\t");
        scanf("%s",h->name);
        printf("请输入数学成绩:\t");
        scanf("%d",&h->maths);
        printf("请输入计算机成绩:\t");
        scanf("%d",&h->com);  
        }
        p2->next=NULL;
        return(head);
}    
   
  void print()
   /*输出*/
  {
      struct node *h;
      int i;i=1;    
      h=la;
      printf("总共有%d名学生\n",n);
	  printf("序号          学号       姓名        数学成绩      计算机成绩\n ");
         while(h!=NULL&&i<=n)  
      {        		  
          printf(" %d  \t\t %d\t %s\t\t%d\t\t %d",i,h->ID,h->name,h->maths,h->com);
          printf("\n");
          i++;
          h=h->next;
      }      
  }
  
   sort()
   /*排序*/
{
   struct node *h,*p,*q,*r,*s;
   h=p=(struct node *)malloc(sizeof(struct node));
    p->next=la;
    while(p->next!=NULL)
      {
        r=p;
        q=p->next;
          while(q->next!=NULL)
             {
                if(q->next->ID<r->next->ID)
                 r=q;
                 q=q->next;
             }
                 if(r!=p)
                   {
                     s=r->next;
                     r->next=s->next;
                     s->next=p->next;
                     p->next=s;
                    }
                     p=p->next;
       }
              la=h->next;
               free(h);            
               print();   
     }
  
void search()
 /*查询*/
{
    struct node *p;
    int i;
    p=la;
    printf("请输入要查询的学号:\t");
    scanf("%d",&i);
   while(NULL!=p)
   {
      if(i==p->ID)
       printf("  %d  %s  %d  %d\n",p->ID,p->name,p->maths,p->com); 
         p=p->next; 
         
     }
}  
void insert()
 /*在链表头部插入*/
{        struct node *p,*s;
       s=(struct node *)malloc(sizeof(struct node));
        n=n+1;
        printf("请输入学号:\t");
        scanf("%d",&s->ID);      
        printf("请输入姓名:\t");
        scanf("%s",s->name);
        printf("请输入数学成绩:\t");
        scanf("%d",&s->maths);
        printf("请输入计算机成绩:\t");
        scanf("%d",&s->com);    
       s->next=la;
       la=s;
       print();
} 
 struct node *getlist(int i)  
	  /*在单链表中查找第i个元素结点,找到后返回其指针,否则返回空*/
{     struct node *p;
      int j;j=0;
      i=i-1;
     p=la;
     while(p->next!=NULL&&j<i)
         {
           p=p->next;j++;
         }
      if(j==i) return p;
      else return NULL;
}
void deletelist()
/*删除单链表上的第i个数据结点*/
{     int i;
      struct node *p,*s;
      n=n-1;
      printf("请输入要删除的学生的序号:\t");
        scanf("%d",&i); 
      p=getlist(i-1);/*查找第i-1个结点*/
      if(p==NULL)
   {printf("not exit\n");}
      else if(p->next==NULL)
          {printf("next is not exist\n");}
      else
      {  
              s=p->next;/*s指向第i-1个结点*/
              p->next=s->next;/*从链表中删除*/
              free(s);/*释放s*/
              print(); 
      }              
}

     void main()
{
      int loop,i;
      loop=TRUE;
      while(loop)
     {
       printf("\t\t\t-----0.退出-----\n");
       printf("\t\t\t-----1.输入-----\n");
       printf("\t\t\t-----2.输出-----\n");
       printf("\t\t\t-----3.排序-----\n");
       printf("\t\t\t-----4.查询-----\n");
       printf("\t\t\t-----5.插入-----\n");
       printf("\t\t\t-----6.删除-----\n"); 
	   printf("\t\t\t请按0结束学号输入!\n");
       scanf("%d",&i);
   switch(i)
   {
     case 0:loop=NULL;break;
     case 1:la=make();break;
     case 2:print();break;
     case 3:sort();break;   
     case 4:search();break;
     case 5:insert();break;
     case 6:deletelist();break;
    }
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -