今天给大家分享链表的实际应用,很多人学数据结构时总是学课本里的伪代码,其实看懂了课本的伪代码只是学会了数据结构的20%,在学数据结构时我们应该要多注重实践,多用已学的数据结构来解决一些实践的问题。下面是我自己写的链表完整代码(包括创建链表,链表插入数据,链表删除数据,修改链表指定位置的值),以供大家参考。

完整源代码:

#include <stdio.h> 
#include <stdlib.h>
struct Stu *create(int n);
void print(struct Stu *head);
void deleteNode(struct Stu *head,int n);
void insertNode(struct Stu *head,int n);
void change(struct Stu *head,int n);
struct Stu{//定义结构体 
    int id;
    char name[50];
    struct Stu *next;
};
int main(){
    int n,j,in,cn;
    char c;
    struct Stu *head = NULL;   //创建头指针 
    printf("请输入你想要创建的节点个数:\n");
    scanf("%d",&n);
    head = create(n);
    print(head);
    while(true){
    printf("请选择你想要执行的操作:\n");
    printf("1.插入节点\n2.删除节点\n3.修改节点\n4.退出程序\n");
    scanf(" %c",&c);
    if(c =='1'){
    printf("你想要在哪插入节点:\n");
    scanf("%d",&in);
    insertNode(head,in);
    print(head); 
    }else if(c == '2'){
    printf("你想要删除哪个节点的数据:\n");
    scanf("%d",&j);
    deleteNode(head,j);
    print(head);
    }else if(c =='3'){
    printf("你想要修改哪个节点的数据:\n");
    scanf("%d",&cn);
    change(head,cn);
    print(head); 
    }else if(c =='4'){
        exit(0);
    }         
 } 
}
struct Stu *create(int n){
    struct Stu *head,*node,*end;                           //定义头节点,普通节点,尾节点 
    head = (struct Stu *)malloc(sizeof(struct Stu));     //给头节点申请内存 
    //head->id = n;                                        //头节点的数据域保存链表的长度 
    end = head;                                            //若是空表,则头尾地址一致 
    for(int i=0;i<n;i++){                                //利用for循环向链表中添加数据 
        node = (struct Stu *)malloc(sizeof(struct Stu));//给普通节点申请内存空间 
        scanf("%d %s",&node->id,node->name);            //给数据域赋值 
        end->next = node;                                //让上一个节点的数据域指向当前节点 
        end = node;                                     //end指向当前节点,最终end指向尾节点 ,end指针向后移动 
    }
    end->next = NULL;                                   //给end的指针域置空 
    return head;                                        //返回头节点的地址 
}
void print(struct Stu *head){
    struct Stu *p = head;
    int j =1;
    p = p->next;  //不打印头节点的数据域中的值 
    while(p != NULL){
        printf("%d\t%d\t%s\n",j,p->id,p->name);//遍历整个链表,给整个链表赋值 
        p = p->next;
        j++;
    }
}
void deleteNode(struct Stu *head,int n){         //删除n处的节点 
    struct  Stu *p = head,*pr = head;
    int i =0;
    while(i<n&&p!=NULL){       //到达指定节点,此时p指向指定节点,pr指向上一节点 
        pr = p;
        p = p->next;
        i++;
    }
    if(p!=NULL){
        pr->next = p->next;
        free(p);
    } else{
        printf("节点不存在!\n"); 
    }

void insertNode(struct Stu *head,int n){    //插入节点 
    struct Stu *p = head,*pr;
    pr = (struct Stu*)malloc(sizeof(struct Stu));  //让pr指向新建节点申请的内存 
    printf("input data:\n");
    scanf("%d %s",&pr->id,pr->name);
    int i = 0;
    //当插入位置是尾节点时,只要在尾节点后再插入一个节点,并让尾节点的指针域指向新建节点,新建节点的指针域置空
    while(i<n&&p!=NULL){             //使p指向将要插入节点的位置 
        p = p->next;
        i++;
    }
    if(p!=NULL){            //如果p没越界 
        pr->next = p->next; //将新建节点的地址指向将要插入节点的后一个节点的地址 。pr在p之后。 
        p->next = pr;       //使插入节点指向新建节点 
    }else{
        printf("节点不存在!\n");
    }
}
void change(struct Stu *head,int n){
    struct Stu *p = head;
    int i = 0;
    while(i<n && p!=NULL){      //使p指向需修改节点 
        p = p->next;
        i++;
    }
    if(p != NULL){             
    printf("请输入修改之后的值:\n");
    scanf("%d %s",&p->id,p->name);    
    }else{
        printf("节点不存在!\n");
    }      

 
执行程序效果图:

本贴为博主亲手整理。如有错误,请评论区指出,一起进步。谢谢大家的浏览。

数据结构之链表的实际应用相关推荐

  1. c语言将一个已知头结点的单链表逆序_C语言数据结构实现链表逆序并输出

    C语言数据结构实现链表逆序并输出 将一个链表逆序并输出.我用了两种方法来实现,第一种是借助了一个新的空链表:第二种是在原来链表的基础上直接实现逆序. 实例代码: 头文件: #include #incl ...

  2. C/C++版数据结构之链表三

    今天来讨论下链表中的双向链表. 双向链表: 概念:在双向链表中,结点除含有数据域外,还含有两个指针域:一个存储直接后继结点的地址,称为右链域:另一个存储直接前驱结点的地址,称为左链域. typedef ...

  3. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  4. linux内核数据结构之链表

    1.前言 最近写代码需用到链表结构,正好公共库有关于链表的.第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域.后来看代码注释发现该代码来自linux内核,在li ...

  5. python链表的创建_python数据结构之链表的实例讲解

    在程序中,经常需要将组(通常是同为某个类型的)数据元素作为整体 管理和使,需要创建这种元素组,变量记录它们,传进传出函数等. 组数据中包含的元素个数可能发变化(可以增加或删除元素). 对于这种需求,最 ...

  6. Java实现自定义队列和树结构_Java数据结构之链表、栈、队列、树的实现方法示例...

    本文实例讲述了java数据结构之链表.栈.队列.树的实现方法.分享给大家供大家参考,具体如下: 最近无意中翻到一本书,闲来无事写几行代码,实现几种常用的数据结构,以备后查. 一.线性表(链表) 1.节 ...

  7. Python数据结构之链表(linked list)

    Python数据结构之链表 一.链表的基本知识 最近在leetcode刷题时遇到了几道关于链表的题,于是恶补了一下关于链表的知识.什么是链表?熟悉python语法的同学肯定都知道list,但是这并不是 ...

  8. 数据结构之链表创建一元多项式,求一元多项式之和

    数据结构之链表创建一元多项式,求一元多项式之和 前言 对于一元多项式,我们完全可以利用线性表P(a0,a1,a2,-,an)表示,这样的线性表在求两个多项式相加等操作时确实简单,但是多于如下的多项式: ...

  9. (五)数据结构之“链表”

    数据结构之"链表" 链表是什么? 数组 vs 链表 JS中的链表 LeetCode:237.删除链表中的节点 LeetCode:206.反转链表 LeetCode:2.两数相加 L ...

  10. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

最新文章

  1. mysql和mariadb可以同时使用吗,MariaDB与MySQL在一台服务器同时运行
  2. python界面颜色怎么改变_pycharm 界面风格修改
  3. 转-eclipse管理多个workspace
  4. 【转】EXC_BAD_ACCESS问题在xode4下的调试技巧
  5. 在SAP ABAP和Hybris Commerce里启动后台作业
  6. table 合并列_Table.Group相邻的两个数合并案例
  7. 力扣76,最小覆盖字串(JavaScript)
  8. excel怎么批量插行_企业开工批量开票怎么办?旭诺教您导入Excel批量开具发票
  9. python库管理_Python中管理数据库
  10. 浅谈Redisson底层源码
  11. 查看linux操作系统版本信息
  12. 数学分析 反函数存在性定理,连续性定理与求导定理
  13. 【计量经济学导论】16. 面板数据模型
  14. 测试人员的工作及介绍
  15. 捡到的文物应该归谁最好
  16. 锐捷交换机忘记密码解决方案:恢复出厂设置、重置配置文件
  17. java方面图形/图像处理
  18. python处理wrf气象数据_气象编程 | Python3之WRF的投影转换
  19. 自定义函数 | R语言偏相关分析及绘图
  20. SELECT FOR ALL ENTRIES IN 通过配置优化速度

热门文章

  1. 研究人员获得了朝鲜黑客组织使用的命令服务器
  2. Java实现一个简单的两人五子棋游戏(六) 行棋方变换
  3. 圆圈中最后剩下的数字(约瑟夫环问题)
  4. 新版Cloudreve安装并绑定OneDrive
  5. SpringBoot —— 整合mybatis+微服务注册
  6. 6个月的大厂 面经,必须点赞!
  7. i18n 是什么,有什么作用
  8. PX4多旋翼姿态控制程序分析mc_att_control
  9. java cron表达式 每天凌晨两点_spring怎么设置定时任务为每天凌晨2点执行和每小时执行一次?...
  10. JPA使用@Modifying踩坑记录