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

📄 singlell.c

📁 用C语言实现动态表的源程序
💻 C
字号:
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10 

typedef struct node
{
  char name[20];
  struct node *link;
}stud;

stud * creat(int n)
{
  stud *p,*h,*s;
  int i;
  if((h=(stud *)malloc(sizeof(stud)))==NULL)
  {
    printf("不能分配内存空间!");
    exit(0);
  }
  h->name[0]='\0';
  h->link=NULL;
  p=h;
  for(i=0;i<n;i++)
  {
    if((s= (stud *) malloc(sizeof(stud)))==NULL)
    {
      printf("不能分配内存空间!");
      exit(0);
    }
    p->link=s;
    printf("请输入第%d个人的姓名",i+1);
    scanf("%s",s->name);
    s->link=NULL;
    p=s;
  }
  return(h);
}

stud * search(stud *h,char *x)
{
  stud *p;
  char *y;
  p=h->link;
  while(p!=NULL)
  {
    y=p->name;
    if(strcmp(y,x)==0)
      return(p);
    else p=p->link;
  }
  if(p==NULL)   printf("没有查找到该数据!");
}

stud * search2(stud *h,char *x)
{
  stud *p,*s;
  char *y;
  p=h->link;
  s=h;
  while(p!=NULL)
  {
    y=p->name;
    if(strcmp(y,x)==0)
      return(s);
    else
    {
      p=p->link;
      s=s->link;
    }
  }
  if(p==NULL)  printf("没有查找到该数据!");
}

void insert(stud *p)
{
  char stuname[20];
  stud *s;
  if((s= (stud *) malloc(sizeof(stud)))==NULL)
  {
    printf("不能分配内存空间!");
    exit(0);
  }
  printf("\n请输入你要插入的人的姓名:");
  scanf("%s",stuname);
  strcpy(s->name,stuname);
  s->link=p->link;
  p->link=s;
}

void del(stud *x,stud *y)
{
  stud *s;
  s=y;
  x->link=y->link;
  free(s);
}

void print(stud *h)
{
  stud *p;
  p=h->link;
  printf("数据信息为:\n");
  while(p!=NULL)
  {
    printf("%s ",&*(p->name));
    p=p->link;
  }
}

void quit()
{
  exit(0);
}

void menu(void)
{
  clrscr();
  printf("\t\t\t单链表C语言实现实例\n");
  printf("\t\t|————————————————|\n");
  printf("\t\t| |\n");
  printf("\t\t| [1] 建 立 新 表 |\n");
  printf("\t\t| [2] 查 找 数 据 |\n");
  printf("\t\t| [3] 插 入 数 据 |\n");
  printf("\t\t| [4] 删 除 数 据 |\n");
  printf("\t\t| [5] 打 印 数 据 |\n");
  printf("\t\t| [6] 退 出 |\n");
  printf("\t\t| |\n");
  printf("\t\t| 如未建立新表,请先建立! |\n");
  printf("\t\t| |\n");
  printf("\t\t|————————————————|\n");
  printf("\t\t 请输入你的选项(1-6):");
}

main()
{
  int choose;
  stud *head,*searchpoint,*forepoint;
  char fullname[20];
  
  while(1)
  {
    menu();
    scanf("%d",&choose);
    switch(choose)
    {
      case 1:head=creat(N);
      break;
      case 2:printf("输入你所要查找的人的姓名:");
      scanf("%s",fullname);
      searchpoint=search(head,fullname);
      printf("你所查找的人的姓名为:%s",*&searchpoint->name);
      printf("\n按回车键回到主菜单。");
      getchar();getchar();
      break;
      case 3: printf("输入你要在哪个人后面插入:");
      scanf("%s",fullname);
      searchpoint=search(head,fullname);
      printf("你所查找的人的姓名为:%s",*&searchpoint->name);
      insert(searchpoint);
      print(head);
      printf("\n按回车键回到主菜单。");
      getchar();getchar();
      break;
      case 4:print(head);
      printf("\n输入你所要删除的人的姓名:");
      scanf("%s",fullname);
      searchpoint=search(head,fullname);
      forepoint=search2(head,fullname);
      del(forepoint,searchpoint);
      break;
      case 5:print(head);
      printf("\n按回车键回到主菜单。");
      getchar();getchar();
      break;
      case 6:quit();
      break;
      default:printf("你输入了非法字符!按回车键回到主菜单。");
      clrscr();
      menu();
      getchar();
    }
  }
}

⌨️ 快捷键说明

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