阅读笔记-数据结构(C语言)-严蔚敏老师-单链表
这里创建单链表都是指定长度进行创建的,之后会补上动态创建。
单链表
- 一、头插法创建单链表(p30)
- 二、尾插法创建单链表
- 三、按索引查找和按值查找
- 四、插入到第几个节点之后
- 五、删除节点
一、头插法创建单链表(p30)
由于严蔚敏老师书上的代码是C/C++混着来的,按照书上的代码敲出来的代码,用C语言编译器编译会报错。
比如
CreateList_L(LinList &L, int n)
这函数,C语言中是没有引用调用(即 &L) 这种用法的。所以下面给出纯C语言的版本,只需要将 &L 换成指针即可。
在这里提出一个小建议,很多博客写的头插法(包括严蔚敏老师书上的),都用到了
typedef struct LNode {} *LinkLIst
,对于新手来说,这种写法不太友好,感觉不太能直观的感受到指针的用法。所以,下面的我直接把它写成了二级指针。之后会补上为什么要这样转化。(即
LnikLIst &L -> LNode** L
)==。T(n) = O(n)
运行结果
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;typedef struct LNode
{ElemType data;struct LNode* next;
} LNode;/* # 头插法创建单链表- 头插法是将每个节点插入到头节点后面,即如输入1,2,3,4,5最后的链表应该是 head->5->4->3->2->1- L是单链表的首地址(头节点)- n是单链表的节点数目
*/
void List_HeadInsert(LNode** L, int n) {(*L) = (LNode*)malloc(sizeof(LNode));(*L)->next = NULL; // 头节点的创建(*L)->data = n;// printf("init: %x\n", &L);for(int i = 0; i < n; i ++) {LNode* p = (LNode*)malloc(sizeof(LNode));scanf("%d", &p->data);p->next = (*L)->next;(*L)->next = p;}
}/*# 打印单链表
*/
void print(LNode** L) {// L = L - 40;// printf("%x\n", &L);LNode* p = (*L)->next;if( !p) {printf("L is NULL.\n");}int len = (*L)->data;printf("Contents of the list are:\n");for (int i = 0; i < len; i ++) {printf("%d%s", p->data, i == len - 1 ? "\n" : "->");p = p->next;}
}int main() {LNode* L;List_HeadInsert(&L, 5);// printf("%x\n", &L);print(&L);return 0;
}
二、尾插法创建单链表
- 头插法创建的单链表和输入的节点逆序,尾插法则是顺序。
- 代码和运行结果。
- T(n) = O(n)
void List_HeadInsert(LNode** L, int n) {(*L) = (LNode*)malloc(sizeof(LNode));(*L)->next = NULL; // 头节点的创建(*L)->data = n;// printf("init: %x\n", &L);for(int i = 0; i < n; i ++) {LNode* p = (LNode*)malloc(sizeof(LNode));scanf("%d", &p->data);p->next = (*L)->next;(*L)->next = p;}
}
三、按索引查找和按值查找
- 运行结果和代码。
- T(n) = O(n)
/* 按序号查找节点值 */
LNode* GetElem(LNode** L, int dst) {if(dst < 0) return NULL;if(dst == 0) return *L;LNode* p = (*L)->next;for (int i = 0 ; i < dst; i ++) {if(p) p = p->next;}return p;
}/* 按元素值查找结点 */
LNode* LocateElem(LNode** L, int e) {LNode* p = (*L)->next;while( p->data != e && p) {p = p->next;}return p;
}
四、插入到第几个节点之后
- 运行结果和代码。
- T(n) = O(n)
/* 插入到第几个节点之后 */
void List_Insert(LNode** L, int dst) {if(dst < 0) return;LNode* s = (LNode*)malloc(sizeof(LNode));printf("var of current insert:\n");scanf("%d", &s->data);if(dst == 0) {s->next = (*L)->next;(*L)->next = s;(*L)->data += 1;return;}LNode* p = GetElem(L, dst-1);s->next = p->next;p->next = s;(*L)->data += 1; // 表长加1
}
五、删除节点
- 运行结果和代码。
- T(n) = O(n)
/* 删除第i个节点 */
ElemType List_Delete(LNode** L, int i) {if(i < 0) return -1;ElemType res;LNode *p, *q;if(i == 0) {q = (*L)->next;res = q->data;(*L)->next = (*L)->next->next;free(q);(*L)->data --;return res;}p = GetElem(L, i - 1);q = p->next;res = q->data;p->next = p->next->next;free(q);(*L)->data --;return res;
}
阅读笔记-数据结构(C语言)-严蔚敏老师-单链表相关推荐
- 数据结构 c语言(严蔚敏) 总结 + 代码
第一章 基本绪论 基本概念和术语 数据(Data):客观事物的符号表示,所有能够输入计算中并被计算机处理的符号的总称. 数据元素(Data Element):数据的基本单位,在计算机中作为一个整体进行 ...
- 数据结构-C语言-严蔚敏
包含教材和教材的习题及答案,望大家找的也不那么辛苦 链接:https://pan.baidu.com/s/1SdTF3EKyv71Qw421kwqVyw?pwd=4t80 提取码:4t80
- 数据结构 c语言 严蔚敏 第十章 答案 10.1,严蔚敏版数据结构(C语言版)参考答案第十章..doc...
第十章 内部排序 10.23 void Insert_Sort1(SqList &L)//监视哨设在高下标端的插入排序算法{??k=L.length;??for(i=k-1;i;--i) // ...
- 数据结构与算法(C语言 严蔚敏)一
锚点 前言 什么是数据结构和算法 相关概念 逻辑结构 物理结构 抽象数据类型 C 语言结构体回顾 前言 有误的地方还请大家指出来,我会一一改正,也会在评论区置顶更正的记录: 如果是因为不同的教材导 ...
- 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
习题集完整源码部分 第3章 栈和队列 ...
- 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
习题集完整源码部分 第3章 栈和队列 ...
- 数据结构个人笔记 第三课 顺序表和单链表
数据结构个人笔记 第三课 顺序表和单链表 顺序表的基本操作 插入元素 删除元素 顺序表查找元素 顺序表更改元素 本节总结代码 单链表 链表的节点 头节点.头指针和首元结点 链表的创建(初始化) 本节总 ...
- 单链表折半查找c语言,为什么有序的单链表不能进行折半查找
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:为什么有序的单链表不能进行折半查找 问题详情:急!!!!拜托高手解答 等级低 分数不高 请帮帮忙 谢谢了回答:这是由链表的特决定的. ...
- Nwafu-OJ-1485 Problem o C语言实习题八——单链表结点的阶乘和
问题 : C语言实习题八--单链表结点的阶乘和 时间限制: 1 Sec 内存限制: 128 MB 提交: 5120 解决: 1555 [提交][状态][讨论版] 题目描述 要求实现一个函数,求单向 ...
最新文章
- 2018-4-8使用兔子的例子对比说明遗传算法,局部搜索,禁忌搜索,模拟退火方法
- comp 313 schemas的学习
- OpenCASCADE:要求
- iOS开发-编译出错 duplicate symbols for architecture x86_64
- leetcode 1489. 找到最小生成树里的关键边和伪关键边(并查集)
- 【CH - 1401】 兔子与兔子(字符串哈希)
- 第58课 百钱买百鸡(完整) 3.完善程序 (《小学生C++趣味编程》)
- mysql meb安装_用meb搭建MySQL Master/Slave
- Java中Object转换为List类型
- java编写一个个人通信录程序
- 再谈UDP协议—浅入理解深度记忆
- MySql【超简单】清空部分表的数据
- Luogu2257 YY的GCD
- idea项目中使用URule 规则引擎的简单例子
- 【radon变换原理讲解及利用python库函数快速实现】
- 【visual studio】visual studio 2022 无法 复制黏贴
- 90%的预测准确率覆盖30%的订单,滴滴出行“猜您要去”目的地预测系统是怎么做的?...
- java怎么对数组中数据进行降序排序?
- Java开源工具库使用之Apache commons-lang3
- 更多内容请移步GitHub
热门文章
- 创·人 | 赵欧伦:90后不要和同龄人比较,认知自己是最酷的事情
- 栈的push、pop 序列
- 低功耗验证 (一) CMOS基础,功耗分类,低功耗方法
- H264码流解析(三):解析SPS和PPS
- 重置计算机win7,win7重置系统,开机一键还原win7系统
- InterSystems IRIS、IRIS for Health和Health Connect 2021.1预览版现已发布
- 个性化推荐系统在互联网中的应用
- macbook pro m1 安全性与隐私无法解锁,鼠标点击无响应,谷歌浏览器,postman无法选择上传文件
- SQL Server 返回了错误 21(设备未就绪。) 解决方法
- Windows 正在配置 Microsoft Office Professional Edition 2003