龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

链表的c语言实现(十)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。 #include #include #include #define N 10 typedef strUCt node { char name[20]; struct node *link;

  在这里列举了一个应用单链表基本算法的综合程序,双向链表和循环链表的综合程序大家可以自己去试一试。

  #include

  #include

  #include

  #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

  {

  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("

请输入你要插入的人的姓名:");

  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("数据信息为:

");

  while(p!=NULL)

  {

  printf("%s ",&*(p->name));

  p=p->link;

  }

  }

void quit()

  {

  exit(0);

  }

void menu(void)

  {

  clrscr();

  printf("单链表C语言实现实例

");

  printf("――――――――――――――――

");

  printf("

");

  printf(" [1] 建 立 新 表

");

  printf(" [2] 查 找 数 据

");

  printf(" [3] 插 入 数 据

");

  printf(" [4] 删 除 数 据

");

  printf(" [5] 打 印 数 据

");

  printf(" [6] 退 出

");

  printf("

");

  printf(" 如未建立新表,请先建立!

");

  printf("

");

  printf("――――――――――――――――

");

  printf(" 请输入你的选项(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("

按回车键回到主菜单。");

  getchar();getchar();

  break;

  case 3: printf("输入你要在哪个人后面插入:");

  scanf("%s",fullname);

  searchpoint=search(head,fullname);

  printf("你所查找的人的姓名为:%s",*&searchpoint->name);

  insert(searchpoint);

  print(head);

  printf("

按回车键回到主菜单。");

  getchar();getchar();

  break;

  case 4:print(head);

  printf("

输入你所要删除的人的姓名:");

  scanf("%s",fullname);

  searchpoint=search(head,fullname);

  forepoint=search2(head,fullname);

  del(forepoint,searchpoint);

  break;

  case 5:print(head);

  printf("

按回车键回到主菜单。");

  getchar();getchar();

  break;

  case 6:quit();

  break;

  default:printf("你输入了非法字符!按回车键回到主菜单。");

  clrscr();

  menu();

  getchar();

  }

  }

  }

  (完)

  

  

  

精彩图集

赞助商链接