教程中国
PHOTOSHOP CS9.0中文版 MAYA 8.5 FOR WINDOWS Corel Painter v9.0 Flash MX2004 中文版 Illustrator cs2 中文版
VC++6.0含sp6 中英文版 VB6.0 +sp6 简体中文版 Borland Delphi 7汉化版 MSDN for vb6.0中文版 Visual Studio 2005简体
教程中国下属 文件存储共享专家BIBIDU.COM 提供大型软件,教材,源码,电影,音乐,图书等下载 更多精品请点此进入
  您目前所在位置: 教程中国 >> C >> 编程实例 >> 自己写的一个链表综合程序 RSS订阅
自己写的一个链表综合程序
教程(视频,书籍)下载:  ASP.NET AutoCAD 数据库 C# ASP java photoshop 网页设计 delphi 3dmax Flash C++ VB 张孝祥 实例   更多请进入BIBIDU搜索
IT搜索引擎   

#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();
      }
   }
}

来源:十度教育
作者:
关键字:自己写,链表综合程序
发表日期:2006-9-6 11:54:37

网页显示有限 阅读全文请下载本文完整版WORD文档

上一篇:一个时钟程序,可以显示当前时间,画的还不cuo   下一篇:锁硬盘逻辑盘程序


2008-10-8 6:09:12
本文的相类似文章
  • 自己写个 C 程式
  • 自己写的备份服务器的脚本
  • 自己写的一个asp.net 的生成曲线图的过程
  • 自己写的一个asp.net的生成曲线图的过程
  • 自己写的一个链表综合程序
  • 自己写的函数方便制作管理界面
  • 自己写溢出的基础,溢出原理
  • 自己写的label 与 textBox 组合的控件
  • 如何 动态编译自己写的代码
  • 自己写的一个资料验证的asp.net程序,大家看看吧!
  • 在学习中进步 在进步中成长 教程中国相随您的成长之路
    华腾联合科技股份有限公司版权所有
    广告联系:Rosibo@163.com