一、前言

哈喽,大家好~我是熊子q,我又来了!

他来了他来了,他带着代码过来了!

今天要分享的代码是链表!快快搬着小板凳!

二、代码

严奶奶的书中预定义了一些预定义常量和类型,大家可以 新建一个y.h文件粘贴以下内容, 然后再去复制代码哦。

y.h文件内容:

/**
* 严奶奶书中的预定义常量和类型
**/
//函数结果状态代码
#define TRUE 1 //成功
#define FALSE 0 //失败
#define OK 1 //成功
#define ERROR 0 //错误
#define INFEASIBLE -1 //不可实行
#define OVERFLOW -2 //溢出
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;

链表LinkList.cpp:

#include "y.h"
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef int ElemType;
/**
* 严奶奶单链表的实现
* by 熊子q 2021.2.1
**/
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList; //获取元素
Status GetElem(LinkList L, int i, ElemType &e){
//L为带头结点的单链表的头指针
//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR
LNode *p = L->next; //p指向第一个结点
int j = 1; //j为计数器
while(p && j<i){ //寻找第i个位置
p = p->next;
++j;
}
if(!p || j>i) return ERROR; //第i个元素不存在
e = p->data; //否则获取第i个元素
return OK;
} //插入元素,时间复杂度O(n)
Status Insert(LinkList &L, int i, ElemType e){
//在带头结点的单链表L中第i个位置之前插入元素e
LNode *p = L;
int j = 0;
while(p && j<i-1){p = p->next;++j;}
if(!p || j>i-1) return ERROR; //i小于1或者大于表长加1
LNode *q = (LNode*)malloc(sizeof(LNode));
q->data = e; //插入数据
q->next = p->next;
p->next = q;
return OK;
} //删除元素,时间复杂度O(n)
Status ListDelete(LinkList &L, int i, ElemType e){
//在带头结点的单链表L中,删除第i个元素,并由e返回其值
LNode *p = L->next;
int j = 1;
while(p && j<i-1){p = p->next;++j;} //寻找i的前驱元素
if(!(p->next) || j>i-1) return ERROR; //删除位置不合理,i元素不存在或
LNode *q = p->next; //删除第i个位置元素,并释放该结点
p->next = q->next;
e = q->data;
free(q);
return OK;
} //创建链表
void CreateList(LinkList &L, int n){
//逆序输入n个元素的值,建立带头结点的单链表L
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL; //建立一个头结点
printf("请输入数据:\n");
for(int i=n;i>0;--i){
LNode *p = (LNode*)malloc(sizeof(LNode));
scanf("%d",&(p->data));
p->next = L->next; L->next = p;
} } //合并两个有序链表
void MergeList(LinkList &La, LinkList &Lb, LinkList &Lc){
//已知单链表La和Lb的元素按值非递减排列
//归并La和Lb得到新的单链表Lc,Lc的元素也按值非递减排列
LNode *pa = La->next;
LNode *pb = Lb->next;
LNode *pc = La; //用La的头结点作为Lc的头结点
Lc = pc;
while(pa && pb){
//取二者中较大值添加到Lc中
if(pa->data > pb->data){
//先添加该节点为pc的后继元素,然后pc和pa指针都后移
pc->next = pa; pc = pc->next; pa = pa->next;
}
else{pc->next = pb; pc = pc->next; pb = pb->next;}
}
pc->next = pa? pa: pb; //插入剩余段
free(Lb); //释放Lb的头结点
} //输出单链表
void Display(LinkList &L){
LNode *p = L->next;
printf("单链表的内容为:");
while(p){
printf("%d",p->data);
if(p->next) printf("->");
else printf("\n");
p = p->next;
}
} int main(){
LinkList l;
CreateList(l, 5);
Display(l);
// printf("在第%d位插入%d",1,123);
// Insert(l, 1, 123);
// Display(l);
int tmp;
GetElem(l, 2, tmp);
printf("%d",tmp);
return 0;
}

三、运行截图

四、附录

如果你想看其他的代码,下面有链接哦:

《数据结构(C语言版)》严蔚敏代码实现———链表的更多相关文章

  1. 数据结构(C语言版)严蔚敏->排序

    @ 目录 1. 插入排序 1.1 直接插入排序 1.2 折半插入排序 1.3 希尔排序(Shell Sort) 2.交换排序 2.1 冒泡排序 2.2 快速排序 3. 选择排序 3.1 简单选择排序 ...

  2. 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明

    <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明 先附上文档归类目录: 课本源码合辑  链接☛☛☛ <数据结构>课本源码合辑 习题集全解析  链接☛☛☛  ...

  3. c++学习书籍推荐《清华大学计算机系列教材:数据结构(C++语言版)(第3版)》下载

    百度云及其他网盘下载地址:点我 编辑推荐 <清华大学计算机系列教材:数据结构(C++语言版)(第3版)>习题解析涵盖验证型.拓展型.反思型.实践型和研究型习题,总计290余道大题.525道 ...

  4. 数据结构C语言版 有向图的十字链表存储表示和实现

    /*1wangxiaobo@163.com 数据结构C语言版 有向图的十字链表存储表示和实现 P165 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h> ...

  5. 数据结构C语言版 表插入排序 静态表

    数据结构C语言版 表插入排序.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了.他只是比对方更珍惜这份感情./*  数据结构C语言版 表插入排序  算法10.3 P267-P270  编译 ...

  6. 数据结构C语言版 弗洛伊德算法实现

    /* 数据结构C语言版 弗洛伊德算法  P191 编译环境:Dev-C++ 4.9.9.2 */ #include <stdio.h>#include <limits.h> # ...

  7. 【数据结构(C语言版)系列二】 栈

    栈和队列是两种重要的线性结构.从数据结构角度看,栈和队列也是线性表,但它们是操作受限的线性表,因此,可称为限定性的数据结构.但从数据类型角度看,它们是和线性表大不相同的两类重要的抽象数据类型. 栈的定 ...

  8. 【数据结构(C语言版)系列三】 队列

    队列的定义 队列是一种先进先出的线性表,它只允许在表的一端进行插入,而在另一端删除元素.这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开.在队列中,允许插入的一端叫做队尾(rear),允许 ...

  9. 【数据结构(C语言版)系列一】 线性表

    最近开始看数据结构,该系列笔记简单记录总结下所学的知识,更详细的推荐博主StrayedKing的数据结构系列,笔记部分也摘抄了博主总结的比较好的内容. 一些基本概念和术语 数据是对客观事物的符号表示, ...

  10. 深入浅出数据结构C语言版(1)——什么是数据结构及算法

    在很多数据结构相关的书籍,尤其是中文书籍中,常常把数据结构与算法"混合"起来讲,导致很多人初学时对于"数据结构"这个词的意思把握不准,从而降低了学习兴趣和学习信 ...

随机推荐

  1. PXE(cobbler)搭建,自动系统安装

    pxe pxe实现全自动安装操作系统,其中用到的软件包括(dhcp首先给客户端分配IP地址提供的系统引导安装系统指向tftp-server启动并加载网络repo仓库由http服务和系统镜像制作) dh ...

  2. 计算机网络中各种报文、HEADER的读法

    计算机里到处都是格式,规范.比如<操作系统真象还原>里提到的"魔数" 直接出现的一个数字,只要其意义不明确,感觉很诡异,就称之为魔数. 拿elf文件头举例 ELF He ...

  3. smart rtmpd 服务器配置文件说明及优化方法介绍

    ---------------------------------------------------------------------------------------------------- ...

  4. Spring IOC——源码分析

    Spring 容器的 refresh() 创建容器 1 //下面每一个方法都会单独提出来进行分析 2 @Override 3 public void refresh() throws BeansExc ...

  5. Google Protobuf 编解码

    更多内容,前往个人博客 Protobuf 全称:Google Protocol Buffers,由谷歌开源而来,经谷歌内部测试使用.它将数据结构以 .proto 文件进行描述,通过代码生成工具可以生成 ...

  6. 暗夜发光,独自闪耀,盘点网页暗黑模式(DarkMode)下的特效和动效,CSS3实现

    众所周知,网页的暗黑模式可以减少屏幕反射和蓝光辐射,减少眼睛的疲劳感,特别是在夜间使用时更为明显.其实暗黑模式也给霓虹灯效应(Neon Effect)提供了发挥的环境. 霓虹灯效应是一种视觉效果,其特 ...

  7. FlinkSQL自定义函数开发

    本次需求场景主要为实现将flinksql中collect()函数输出的Mutiset(VARCHAR<100>)多行结果转换为字符串. 一.FlinkSQL自定义函数分类 Flink SQ ...

  8. 重新编译Unity Mono遇到的坑,大坑,巨坑!!!

    因为项目需要,要整一个DLL热更功能,本身也想对DLL进行加密,所以需要修改Mono的代码,并重新编译.参考了网上的教程后,决定在linux下做重编的工作. 然而在实际执行的时候,一开始就碰到了巨大的 ...

  9. 端口转发、Http Tunnel、内网穿透

    原文链接:https://www.yuque.com/tec-nine/architecture/mgxc71 SSH 命令帮助 命令行选项有: -a 禁止转发认证代理的连接. -A 允许转发认证代理 ...

  10. 逍遥自在学C语言 | 位运算符&的高级用法

    前言 在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法. 一.人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 -- 自在. 第二位 ...