C语言链表的插入和删除、建立

    技术2022-05-11  8

    choiceTXT.h

    //执行要重复的代码,选择执行的醒目并将结果付给choice#include"stdio.h"

    int choiceTXT(){ int choice;  printf("/n/t请选择你要执行的选项:"); printf("/n===============================/n/n"); printf("/t1.创建/n"); printf("/t2.浏览/n"); printf("/t3.插入/n"); printf("/t4.删除/n"); printf("/t5.退出/n"); printf("/n===============================/n"); printf("/t你要的操作(1-5):"); scanf("%d",&choice); return choice;}

    int choice(){ int choice = choiceTXT();

     while(1) {   if((choice < 1) || (choice >5))  {   printf("/n/t你的选择无效!!重新选择。");   choice = choiceTXT();  }  else  {   return choice;  } }}

     

    creat.c

     

    #include"stdio.h"#include"stdlib.h"#include"define.h"

    extern count;

    struct stuList *creat(){ struct stuList *head,*pf,*pc;//pc:当前输入的记录                              //pf:前一条记录 int yn=1;  while(yn) {  pc = (struct stuList *)malloc(sizeof( struct stuList));    if(pc==NULL)  {   printf("/n/tCREAT ERRO!!/n ");   return NULL;  }  printf("/t请输入姓名:");  fflush(stdin);  scanf("%s",pc->stuName);  printf("/t请输入学号:");  fflush(stdin);  scanf("%d",&pc->stuId);

      printf("/t请输入成绩:");  fflush(stdin);  scanf("%d",&pc->stSoult);    if(count==0)   head = pf = pc;  else pf->next = pc;//前一条纪律的next指向当前记录  count++;  pc->next = NULL;  pf = pc;    printf("/t是否还要输入:");  scanf("%d",&yn);

      if(yn == 0 )   return head; }  }

     

    define.h

     

    // 定义用于链表的结构struct stuList{ char stuName[10]; int  stuId; int  stSoult; struct stuList *next;};

     

    dele.c

     

    #include"stdio.h"#include"define.h"#include"stdlib.h"

    struct stuList *dele(struct stuList *head){ struct stuList *back,*pf; int  numId;

     if(head==NULL) {  printf("/t NO DELETE BECOUSE OR LIST IS NULL!!");  return NULL; }

     printf("/t请你输入你要删除的的学生学号:"); scanf("%d",&numId);

     back = head; if(head->stuId == numId) {  back = back->next;  free(head);  return back; }

        pf = back; back=back->next; while(back != NULL) {  if(back->stuId == numId)  {   pf->next=back->next;   free(back);   return head;  }  pf = back;  back=back->next; } printf("/n/t没有你要删除的学生:/n"); return head;}

     

    display.c

    #include"stdio.h"#include"define.h"

    void disp(struct stuList *head){ struct stuList *pc; pc = head; printf("/t姓名/t学号/t成绩/n"); while(pc != NULL) {  printf("/t%s/t%d/t%d/n",pc->stuName,pc->stuId,pc->stSoult);  pc=pc->next;

     }}

     

    insert.c

     

    #include"stdio.h"#include"stdlib.h"#include"define.h"

    extern count;

    struct stuList * insert(struct stuList *head){ struct stuList *pc,*pi,*back; int numId;  pi = (struct stuList *)malloc(sizeof(struct stuList)); printf("/t要插入学生的姓名:"); fflush(stdin); scanf("%s",pi->stuName);

     printf("/t要插入学生的学号:"); scanf("%d",&pi->stuId);

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

     if(head==NULL) {    head=pi;  head->next=NULL;  count++;  return head; } printf("/n/t请输入要插入的位置:"); scanf("%d",&numId);  pc = head; while (pc !=NULL) {  if(pc->stuId==numId)  {   pi->next = pc->next;   pc->next = pi;   count++;   return head;  }  back=pc;  pc=pc->next; }  pi->next=NULL; back->next=pi;   count++; return head;}

     

     

    LinkList.c

     

    #include"stdio.h"#include"choiceTXT.h"#include"define.h"

    int count=0;struct stuList *creat();void disp(struct stuList *head);struct stuList *insert(struct stuList *head);struct stuList *dele(struct stuList *head);

    void main(){ struct stuList *head; int    chose;

     head=NULL;//初始化指针head;    while(1) {  chose=choice();  switch(chose)  {  case 1:   head=creat();   break;  case 2:   if(head==NULL)   {    printf("/tLIST IS NULL!!/n");    break;   }else   {    disp(head);    break;   }  case 3:   head=insert(head);   break;  case 4:   head = dele(head);   break;  case 5:   return;  } }} 


    最新回复(0)