经过本节课的学习,c语言可以真正与我们的实际生活联系起来了,增强了我的动脑和动手能力,今天讲的是链表。链表我的理解要包含以下特征: (1).由n个节点离散分配;(2).每个节点通过指针连接(3)每一个节点由一个前驱节点和一个后驱节点(4).首节点没有前驱节点,尾节点没有后驱节点; 满足上面的4条,我们就称为链表;链表既然由很多个节点,那节点又由什么组成?节点由两个部分组成,一是数据域,用来存放有效数据;二是指针域,用来指向下一个节点;下面用C语言来构建链表数据结构,首先应该构造出节点,然后再把所有的节点连起来,就构成了链表;

#include <stdio.h>  
#include <conio.h>  
#include <string.h>  
#include <stdlib.h>
#define N 3
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) 
/*另一个查找函数,返回的是上一个查找函数的直接前驱结点的指针,
h为表头指针,x为指向要查找的姓名的指针
其实此函数的算法与上面的查找算法是一样的,只是多了一个指针s,并且s总是指向指针p所指向的结点的直接前驱,
结果返回s即是要查找的结点的前一个结点*/
{
   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) /*插入函数,在指针p后插入*/
{
   char stuname[20];
   stud *s; /*指针s是保存新结点地址的*/
   if((s= (stud *) malloc(sizeof(stud)))==NULL)
   {
     printf("不能分配内存空间!");
     exit(0);
   }
   printf("请输入你要插入的人的姓名:");
   scanf("%s",stuname);
   strcpy(s->name,stuname); /*把指针stuname所指向的数组元素拷贝给新结点的数据域*/
   s->link=p->link; /*把新结点的链域指向原来p结点的后继结点*/
   p->link=s; /*p结点的链域指向新结点*/
}

void del(stud *x,stud *y) /*删除函数,其中y为要删除的结点的指针,x为要删除的结点的前一个结点的指针*/
{
  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 \n",&*(p->name));
     p=p->link;
   }
}

void quit()
{
  exit(0);
}
void menu(void)
{
    system("cls"); 
    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("你输入了非法字符!按回车键回到主菜单。");
           system("cls"); 
           menu();
           getchar();
      }
   }
}

王玉迪 150206305相关推荐

  1. 王玉迪 150206305

    #include"stdio.h" #include"stdlib.h" #include"string.h" #include" ...

  2. 清华大学王玉计算机,王玉珏(清华大学环境学院教授)_百度百科

    王玉珏,清华大学环境学院教授,毕业于清华大学环境科学与工程系环境工程专业学士,Water Environment Federation 会员. 中文名 王玉珏 外文名 wangyu jue 国     ...

  3. 清华大学王玉计算机,清华大学环境学院研究生导师:王玉珏

    清华大学环境学院研究生导师王玉珏介绍如下: 姓 名: 王玉珏 所在单位: 清华大学环境学院 职 称: 副高级 邮寄地址: 清华大学环境学院 100084 电子邮件: wangyujue@tsinghu ...

  4. 清华大学王玉计算机,清华大学“国际杯”足球邀请赛落幕

    清华大学"国际杯"足球邀请赛落幕 来源:新华社 2018-05-14 郑道锦 2018年清华大学"国际杯"足球邀请赛13日落幕,比赛吸引了来自19个国家的清华在 ...

  5. RapidIOIP核的验证方法研究_王玉欢

    RapidIOIP核的验证方法研究_王玉欢 https://wenku.baidu.com/view/0fd3c925d4d8d15abf234e73.html

  6. 给我写信 wyz831201王玉镇

    点击上方"给我写信"就可以给我写信了! 本文章作者简介:王玉镇 ,一个爱编程的初一学生,热爱c++,Python,Minecraft编程.对Unity 3D感兴趣.喜欢制作各种小游 ...

  7. MD5暴力碰撞对王玉斌讲解PPT的总结

    王玉斌者,蓝杰1020组成员也.征战ACM亚洲赛,获金奖,享誉中南信息院.余听其讲PPT两次,由浅入深,通俗易懂,颇有感触,遂总结一下,发到博客中来,与诸君共勉. 最近的一次PPT讲解是对MD5暴力碰 ...

  8. 南华大学计算机学院王玉锋,喜报!南华大学和王玉锋同学双双获奖!

    近日,由湖南省教育厅主办,湖南省学生资助管理中心.湖南教育电视台承办的"奋斗青春·筑梦同行"湖南省第一届励志成才好学生典型宣传活动结果揭晓.经各学校推荐.市州把关.省级两轮评审,最 ...

  9. (视频免费分享)王玉成:用github有效组织项目讲座

    这是王玉成老师关于github直播的视频.玉成老师在这个视频里面主要讲了如何通过github进行多人合作项目开发. 直播讲师:王玉成 IoT GDE多年嵌入式开发经验,目前为国内的唯一的IoT GDE ...

最新文章

  1. mysql oracle sqlit_【Go语言】连接数据库SQLite、MySQL、Oracle
  2. 修改Windows7登录界面背景图片的方法
  3. 2022.2.21显示器连接器引脚信号定义1
  4. ubuntu java 全屏显示_java 在ubuntu下实现全屏,上面的状态栏依然显示。如下图,不想要上面的状态栏...
  5. 你永远不知道女生裙子下面藏着什么
  6. poj 3101Astronomy(圆周追击+分数最小公倍数)
  7. KITTY数据集 下载 及 使用
  8. 怎样更改计算机ip,怎么快速修改电脑ip地址
  9. war包的解压与打包
  10. 如何快速且不失真剪切与合并视频?如何将视频快速转成MP4格式?无需渲染!视频秒转MP4,剪辑合并!
  11. MySQL之——mysql5.5 uuid做主键与int做主键的性能实测
  12. 什么是MapReduce?MapReduce的运行机制是什么?MapReduce的实现过程
  13. ForkJoinPool 大型图文现场
  14. 阿里巴巴 DevOps 转型后的运维平台建设
  15. html a标签去掉下划线_菜鸟HTML基础学习篇
  16. 【如何成为学习高手】学习是有方法的,按照正确的方法练习,每个人都可以成为学霸
  17. compression-webpack-plugin Gzip压缩
  18. MySql安装Muti
  19. Ubuntu 上 Mediapipe 运行Hello World! on Android例子
  20. Excel函数高级使用方法

热门文章

  1. 千呼万唤,web人脸识别登录完整版来了,这样式我爱了
  2. ps中的实例小学习——初学抠图及蒙版
  3. 学单片机之前需要做哪些准备?
  4. python里面pow是什么意思_pow在python中是什么意思
  5. Pikachu靶场:XSS盲打
  6. 』 [大话IT]我编的计算机基础教材,大家批判批判
  7. Java 常见摘要算法——md5、sha1、sha256
  8. 调用Android短信软件进行短信群发
  9. 《别用面包钓鲔鱼》--读书流水账no3
  10. 微信useragent java_微信内置浏览器和小程序的 User Agent 区别及判断方法