再写链表的建立、浏览、修改、插入、删除(接下来是双链表)

来源:互联网 发布:python字典get后加一 编辑:程序博客网 时间:2024/05/21 17:33

 pList.h


struct PList
{
  char name[10];
  char stuId[8];
  short resoult;
  struct pList *next;
};

 

creat.c

#include "stdio.h"
#include "pList.h"
#include "stdlib.h"

extern int count;
struct PList *creat(struct PList * head)
{
 struct PList *pc,*pf;
 char yn='y';

 do
 {
  pc = (struct PList *)malloc(sizeof(struct PList ));

  if(pc == NULL)
  {
   printf("/tLIST CREAD FAILED!!!!");
   return NULL;
  }

  printf("/t请输入学生姓名:");
  fflush(stdin);
  scanf("%s",pc->name);

  printf("/t请输入学生学号:");
  fflush(stdin);
  scanf("%s",pc->stuId);

  printf("/t请输入学生成绩:");
  fflush(stdin);
  scanf("%d",&pc->resoult);

  if(count == 0)
   pf = head =pc;
  else  pf->next = pc ;
  count++;
  pc->next = NULL;
  pf = pc;

  printf("/t是否还要录入学生:");
  fflush(stdin);
  scanf("%c",&yn);
 }while(toupper(yn) !='N');

 return head;
}

del.c

#include "stdio.h"
#include "pList.h"
#include "string.h"
#include"stdlib.h"

extern count;
struct PList *del(struct PList *head)
{
 struct PList * pc,*back;
 char sId[8]; 
 if(head == NULL)
 {
  printf("/nTLIST IS NULL, DELETE FAILED!!/n");
  return NULL;
 }
 
 printf("/n请输入你要删除的学号:");
 scanf("%s",sId);
 if(strcmp(head->stuId,sId)==0)
 {
  pc=head->next;
  free(head);
  count--;
  return pc;
 }
 
 pc = head;
 back = pc;
 pc = pc->next;
 while(pc != NULL)
 {
  if(strcmp(pc->stuId,sId)==0)
  {
   back->next=pc->next;
   free(pc);
   count--;
   return head;
  }
  back = pc;
  pc= pc->next;
 }
 return head;
 printf("/tNO RECORDE!!!");
}

disp.c

 

#include "stdio.h"
#include "pList.h"

extern int count;

void disp(struct PList * head)
{
 struct PList * pc;
 short total=0;
 
 if(head == NULL)
 {
  printf("/n/tLIST IS EMPTY!!!/n");
 }
 else
 {
  pc = head;
  
  printf("/t姓名/t学号/t成绩/n");
  while(pc != NULL)
  {
   printf("/t%s/t%s/t%d/n",pc->name,pc->stuId,pc->resoult);
   total = total+pc->resoult;
   pc = pc->next;
  }
  printf("/n/t共%d个学生/t总成绩%d分/t平均成绩:%1.2f分/n",count,total,(float)total/count);
 }
}

 

insert.c

#include "stdio.h"
#include "pList.h"
#include "stdlib.h"
#include "string.h"
extern int count;

struct PList *insert(struct PList * head)
{
 struct PList *back,*pc,*pi;
 char   sId[8];
 
 pi = (struct PList * )malloc(sizeof(struct PList));
 if(pi == NULL)
 {
  printf("/tINSERT FAILED!!");
  return NULL;
 }
 
 printf("/t请输入学生姓名:");
 fflush(stdin);
 scanf("%s",pi->name);

 printf("/t请输入学生学号:");
 fflush(stdin);
 scanf("%s",pi->stuId);

 printf("/t请输入学生成绩:");
 fflush(stdin);
 scanf("%d",&pi->resoult);
  

 if(head == NULL)
 {
   
  head = pi;
  head->next = NULL;
  count++;
  return head;
 }

 printf("/t你要插入谁的后面(学号):");
 scanf("%s",sId);

 pc = head;
  
 while (pc != NULL)
 {
  if(strcmp(pc->stuId,sId)==0)
  {
    pi->next = pc->next;
    pc->next = pi;
    count++;
    return head;
  }
  back = pc;
  pc=pc->next;
 }

 back->next=pi;
 pi->next=NULL;
 count++;
    return head;
}

modif.c

#include "stdio.h"
#include "pList.h"
#include "string.h"

void modif(struct PList * head)
{
 struct PList *pc;
 char sId[8];
 short mresoult;
   
 if(head == NULL)
 {
  printf("/n/tLIST IS EMPTY, MODIF FAILED!!/n");
 }
 else
 {
  printf("/n/t请输入要修改的学生学号:");
  fflush(stdin);
  scanf("%s",sId);
       
  pc = head;
  while(pc != NULL)
  {
   if(strcmp(pc->stuId,sId)==0)
   {
    printf("/n/t修改前:/n");
    printf("/t姓名/t学号/t成绩/n");
    printf("/t%s/t%s/t%d/n",pc->name,pc->stuId,pc->resoult);

    printf("/t请输入新成绩:");
    scanf("%d",&mresoult);
    pc->resoult=mresoult;
    printf("/n/t修改后:/n");
    printf("/t姓名/t学号/t成绩/n");
    printf("/t%s/t%s/t%d/n",pc->name,pc->stuId,pc->resoult);
    break;
   }
   pc=pc->next;
  }

  if(pc == NULL)
   printf("/t没有你要的学号!!!/n");
 }
}
LinkList.c

#include "stdio.h"
#include "pList.h"

int count=0;
struct PList *creat(struct PList * head);
void disp(struct PList * head);
struct PList *  insert(struct PList * head);
void modif(struct PList * head);
struct PList * del(struct PList *head);


void main()
{
 struct PList *head=NULL;
 char   yn = 'y' ;
 short  choice;

 do
 {
  printf("/n===========================/n");
  printf("/n/t1.创建/n");
  printf("/t2.浏览/n");
  printf("/t3.插入/n");
  printf("/t4.修改成绩/n");
  printf("/t5.删除/n");
  printf("/t6.退出/n/n");
  printf("/n===========================/n");

  printf("/t请输入你要的操作:");
  scanf("%d",&choice);
  if(choice < 1 || choice >6 )
  {
   printf("/t没有你要的选择,请重新选择!!/n");
  }
  else
  {
   switch(choice)
   {
   case 1:
    head=creat(head);
    break;
   case 2:
    disp(head);
    break;
   case 3:
    head=insert(head);
    break;
   case 4:
    modif(head);
    break;
   case 5:
    head=del(head);
    break;
   case 6:
    yn = 'n';

   }
  }
 }while(yn == 'y');
}

原创粉丝点击