链表基本操作:链表初始化,增,删,改,查,遍历链表

以下完整代码建立在创建好的链表基础上,读者可自行完善。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>typedef struct Link
{char elem;struct Link * next;
}link;
//初始化
link * initLink();
//增
link * insertElem(link * p,int elem,int add);
//删
link * delElem(link * p,int add);
//改
link *amendElem(link * p,int add,int newElem);
//查
int selectElem(link * p,int elem);
//遍历
void display(link *p);link * initLink(){int i;//创建头节点link *p = (link*)malloc(sizeof(link));  //声明一个指针指向头节点, 用于遍历链表link *temp = p;for(i = 1 ; i < 5 ; i++){link *a = (link*)malloc(sizeof(link));a->elem = i;a->next = NULL;temp->next = a;temp = temp->next;}return p;
}//p为原链表,elem表示新数据元素,add表示新元素要插入的位置
link * insertElem(link * p , int elem , int add){int i;link * temp = p;//首先找到要插入位置的上一个结点for(i =1 ; i < add ; i++){if(temp == NULL){printf("error!\n");return p;}temp = temp->next;}//创建插入节点link * a = (link*)malloc(sizeof(link));a->elem = elem;//向链表中插入节点a->next = temp->next;temp->next = a;return p;
}//p为原链表,elem为要删除元素的值
link * delElem(link * p, int add){int i;link * temp = p;//temp指向被删除节点的上一个节点for(i = 1 ; i < add ; i++){temp = temp->next;}link * del = temp->next;           //单独设置一个指针指向被删除结点,以防丢失temp->next = temp->next->next;       //删除某个结点的方法就是更改前一个结点的指针域free(del);                          //手动释放该结点,防止内存泄漏return p;
}//更新函数,其中,add 表示更改结点在链表中的位置,newElem 为新的数据域的值
link * amendElem(link * p, int add, int newElem){int i;link * temp = p;temp = temp->next;                 //在遍历之前,temp指向首元结点for(i = 1 ; i < add ; i++){temp = temp->next;}temp->elem = newElem;return p;
}//p为原链表,elem表示被查找元素
int selectElem(link * p, int elem){link * temp = p;int i = 1;//由于头节点的存在,因此while中的判断为t->nextwhile(temp->next != NULL){temp = temp->next;if(temp->elem == elem){return i;}i++;}return -1;
}void display(link * p){link * temp;temp = p;do{temp = temp->next;printf("%d\t",temp->elem);}while(temp->next != NULL);printf("\n");
}int main()
{//初始化链表(1,2,3,4)printf("初始化链表为:\n");link *p=initLink();display(p);printf("在第4的位置插入元素5:\n");p=insertElem(p, 5, 4);display(p);printf("删除元素3:\n");p=delElem(p, 3);display(p);printf("查找元素2的位置为:\n");int address=selectElem(p, 2);if (address==-1) {printf("没有该元素");}else{printf("元素2的位置为:%d\n",address);}printf("更改第3的位置上的数据为7:\n");p=amendElem(p, 3, 7);display(p);return 0;
}

代码来源于:解学武《数据结构概述》

链表的基本操作(C语言)相关推荐

  1. 链表的基本操作--c语言

    链表是数据结构中一种最基本的数据结构,它是用链式存储结构实现的线性表.它较顺序表而言在插入和删除时不必移动其后的元素.现在给你一些整数,然后会频繁地插入和删除其中的某些元素,会在其中某些时候让你查找某 ...

  2. 【数据结构】二、单链表的基本操作(C语言)

    目录 引用头指针的好处: 1.结点的定义和初始化单链表 2.判断单链表是否为空表 3.销毁单链表 4.清空单链表,头结点和头指针还在 5.求单链表表长 6.取单链表中指定位置的数据 7.按值查找,返回 ...

  3. 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)

    链表的基本操作(C语言)详解 #include <stdio.h> #include <stdlib.h>typedef struct Link{int elem;struct ...

  4. 单链表的基本操作代码实现(C语言版)

    目录 前言: 单链表的基本操作 准备工作(头文件.各种宏定义以及结构体定义) 一.较简单操作 1.单链表的初始化 2.判断单链表是否为空表 3.单链表的销毁 4.单链表的清空 5.求单链表的表长 二. ...

  5. 链表c++语言 解析,C++ 单链表的基本操作(详解)

    链表一直是面试的高频题,今天先总结一下单链表的使用,下节再总结双向链表的.本文主要有单链表的创建.插入.删除节点等. 1.概念 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数 ...

  6. 数据结构之【线性表】(顺序表、链表的基本操作实现)

    概念 线性表:是N个数据元素的有限序列. 顺序表:用一组地址连续的存储单元依次存储[线性表 ]的数据元素.(区别于有序表:表中的数据元素存在非递增或非递减有序) 链表:用一组任意的存储单元来存储[线性 ...

  7. c语言 链表 删除节点,C语言实现单链表节点的删除(不带头结点)

    对单链表节点进行增删改查是最基本的操作,这篇博客将会来实现对节点的删除.其他的操作可参考<C语言实现链表的基本操作>这篇博客.删除某个节点有两个类型: (1)删除i某个位置的节点: (2) ...

  8. 单链表的基本操作-插入结点、删除结点、新建链表、查找结点位置

    ** C语言新手小白的学习笔记-------------目前持续更新中 ** 本人90后电气工程及其自动化大学生,大二开始接触C语言,写过前端,Python,但是都不精通,通过许多认识后明白了自身的许 ...

  9. 入门:链表的基本操作

    入门:链表的基本操作 标签:C语言 链表 By 小威威 1.写这篇博文的原因 C语言有三大重要部分:流程控制.函数.指针. 对于指针,单单了解它的简单应用是不够的,最重要的还是学习链表.许多参考书对链 ...

  10. 数据结构实验3、单链表的基本操作实现

    实验三: 作者说: 写的如果有不太好的地方,欢迎大佬指点! 一.运行效果截图 二.实验要求 实验3.单链表的基本操作实现 (1)实验目的 通过该实验,深入理解链表的逻辑结构.物理结构等概念,掌握链表基 ...

最新文章

  1. CSP 201912-2 回收站选址 python实现+详解
  2. apache和tomcat区别
  3. cmake的使用-目标类型详解
  4. postgresql测试题_PostgreSQL练习
  5. 复读数组(nowcoder 1103A)
  6. Windows 7 64位系统上搭建Hadoop伪分布式环境(很详细)
  7. 支付宝前端推出《Web前端开发入门手册》
  8. pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
  9. python查看内置模块,python快速查看内置模块函数
  10. 梦断代码最后4章读后感
  11. el-input 提示不能为空那个_dede后台发布文章的时候显示标题不能为空?
  12. 第十三章 RememberMe——《跟我学Shiro》[张开涛]
  13. C语言中数字转换成字符,c语言中数字转换成字符串的方法
  14. OpenCV实战 | 低对比度缺陷检测应用实例--LCD屏幕脏污检测
  15. 高效能人士的七个习惯学习总结
  16. 前端晋升答辩-性能优化篇范式
  17. 六一儿童节倾情奉献,校内首发,CSDN再发,2011年冬季c/c++程序员找工作心得
  18. 今日分享——《青春》(李大钊)
  19. 玩客云刷Armbian详细教程
  20. anaconda初始化报错:Anaconda:There is an instance of anaconda navigator already running error 和 卡在loading

热门文章

  1. 使用傲梅分区助手绿色版给C盘扩容
  2. vue中 ECharts 图表使用教程
  3. Excel数据透视表:切片器
  4. 前端(Jinja2)
  5. word文档的只有横线的表格怎样做
  6. 【X3D: Expanding Architectures for Efficient Video Recognition】
  7. NUCLEO-L432KC实现GPIO控制(STM32L432KC)
  8. [转]FTP搜索引擎的设计与实现 1
  9. 半监督学习:MixMatch
  10. [Excel常用函数] countif countifs函数