庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>C语言>编程实例>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

自己写的一个链表综合程序

 作者:Zc    日期:2005-8-4 14:12:10
字号选择〖 〗/ 双击滚屏 单击停止   

#include<stdio.h>
#include<malloc.h>
#include<string.h>

typedef struct elem/*定义接点*/
  {
   char name[10];
   struct elem *next;
  }create;

create *head,*van,*cur,*temp;/*定义头接点(head),前驱接点(van),当前接点(cur),零时接点(temp)*/

void menu()/*创建菜单*/
  {
   printf("\t\t\t1.创建新链表------[1]\n");
   printf("\t\t\t2.插入新元素------[2]\n");
   printf("\t\t\t3.删除旧元素------[3]\n");
   printf("\t\t\t4.查找旧元素------[4]\n");
   printf("\t\t\t5.倒置原链表------[5]\n");
   printf("\t\t\t6.显示所有元素----[6]\n");
   printf("\t\t\t7.退出------------[7]\n\n");
   printf("请选择(1~7): ");
  }
void new(int n)/*创建新链表,参数n为链表长度*/
  {
   int i;
   printf("\n");
   if((head=(create *)malloc(sizeof(create)))==NULL)/*定义头接点*/
     {
      printf("\n不能创建链表");
      exit(1);
     }
   van=head;/*将前驱接点指针指向头接点*/
   for(i=1;i<=n;i++)
     {
      if((cur=(create *)malloc(sizeof(create)))==NULL)/*定义新接点*/
        {
         printf("\n不能创建链表");
         exit(1);
        }
      cur->next=NULL;/*将当前接点的后继指针置空*/
      van->next=cur;/*连接接点*/
      printf("输入第%d个人的名字: ",i);
      scanf("%s",&cur->name);/*输入当前接点的数据域内容*/
      van=cur;
     }
  }

create *research(char searchname[10])/*查找接点函数*/
  {
   van=head;
   temp=head->next;
   while(temp!=NULL)
     {
      if(strcmp(temp->name,searchname)==0)
        {
         return(temp);
        }
      else
        {
         van=temp;
         temp=temp->next;
        }
     }
   return(temp);
  }

void print()/*显示链表函数*/
  {
   temp=head->next;
   printf("\n");
   while(temp!=NULL)
     {
      printf("%s  ",temp->name);
      temp=temp->next;
     }
  }

void insert(create *insert_point,char insert_name[10])/*插入接点函数*/
  {
   if((cur=(create *)malloc(sizeof(create)))==NULL)
     {
      printf("\n不能创建链表");
      exit(1);
     }
   stpcpy(cur->name,insert_name);
   cur->next=insert_point->next;
   insert_point->next=cur;
  }
void delete(create *delete_point)/*删除接点函数*/
  {
   van->next=delete_point->next;
   free(delete_point);
  }
int turnlist()/*倒置链表函数*/
  {
   van=head->next;
   cur=van->next;
   van->next=NULL;
   while(cur!=NULL)
     {
      temp=cur->next;
      cur->next=van;
      van=cur;
      cur=temp;
     }
   head->next=van;
  }  
main()
{
 int select,length;
 char tempname[10];
 head=NULL;
 while(1)
   {
    clrscr();
    menu();
    scanf("%d",&select);
    switch(select)
      {
       case 1:             
              printf("\n请输入你要建立的链表的长度: ");
              scanf("%d",&length);
              new(length);
              printf("\n链表已创建,按任意键返回\n");
              getch();
              break;     
       case 2:         
              if(head==NULL)
                {
                 printf("\n请先建立链表,按任意键返回 \n");
                 getch();
                 break;
                }   
              printf("\n以下为链表中原有元素: ");
              print();
              printf("\n请输入你要在哪个名字后面插入新名字: ");
              scanf("%s",&tempname);
              temp=research(tempname);
              if((temp=research(tempname))==NULL)
                {
                 printf("\n没有找到你要输入的名字,按任意键返回\n");
                 getch();
                }
              else
                {
                 printf("\n请输入你要插入的名字: ");
                 scanf("%s",&tempname);
                 insert(temp,tempname);
                 printf("\n插入成功,以下为插入后的链表: ");
                 print();             
                 printf("\n按任意键返回\n");
                 getch();
                }
              break;
       case 3:
              if(head==NULL)
                {
                 printf("\n请先建立链表,按任意键返回 \n");
                 getch();
                 break;
                }
              printf("\n以下为链表中原有元素: ");
              print();
              printf("\n请输入你要删除的名字: ");
              scanf("%s",&tempname);
              temp=research(tempname);
              if((temp=research(tempname))==NULL)
                {
                 printf("\n没有找到你要删除的名字,按任意键返回\n");
                 getch();
                }
              else
                {
                 delete(temp);
                 printf("\n删除成功,以下为删除后的链表: ");
                 print();             
                 printf("\n按任意键返回\n");
                 getch();
                }
              break;             
       case 4:
              if(head==NULL)
                {
                 printf("\n请先建立链表,按任意键返回   \n");
                 getch();
                 break;
                }
              printf("\n输入你要查找的名字: ");
              scanf("%s",&tempname);        
              if((temp=research(tempname))==NULL)
                {
                 printf("\n没有找到你要找的名字,按任意键返回\n");
                 getch();
                }
              else
                {
                 printf("\n找到你要找的名字: %s",temp->name);
                 printf("\n\n按任意键返回\n");
                 getch();
                }
              break;  
       case 5:
              printf("\n以下为原链表:");
              print();
              printf("\n\n以下为倒置后的链表:");
              turnlist();
              print();
              printf("\n\n倒置成功,按任意键返回\n");
              getch();             
              break;      
       case 6:
              if(head==NULL)
                {
                 printf("\n请先建立链表,按任意键返回   \n");
                 getch();
                 break;
                }
              printf("\n以下为你链表中的所有元素: ");
              print();
              printf("\n\n按任意键返回");
              printf("\n");
              getch();
              break;                    
       case 7:
              printf("\n谢谢使用,按任意键退出");
              getch();
              exit(0);
              break;
       default:
               printf("\n输入错误,请重新选择,按任意键返回\n");
               getch();
               clrscr();
      }
   }
}

上一篇:一个时钟程序,可以显示当前时间,画的还不错    下一篇:锁硬盘逻辑盘程序  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: Zc
信息来源: 网络 录入时间: 2005-8-4 14:12:10
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿