清华严蔚敏《数据结构》C语言代码实现

需积分: 10 2 下载量 168 浏览量 更新于2024-07-28 收藏 307KB DOC 举报
"《数据结构》清华大学严蔚敏教授的代码示例,涵盖了C语言实现的数据结构基础,包括线性表的动态分配顺序存储结构。" 这篇代码涉及到数据结构中的核心概念,主要围绕线性表的动态分配顺序存储结构进行。在数据结构中,线性表是一种基本且重要的数据组织形式,它包含一系列相同类型的元素,元素间存在一对一的关系。在C语言中,线性表可以被实现为数组或链表。 代码首先包含了多个头文件,如`<string.h>`用于字符串操作,`<ctype.h>`处理字符类型,`<malloc.h>`提供动态内存分配功能,`<stdio.h>`支持输入输出,`<stdlib.h>`包含`atoi()`函数将字符串转换为整型,以及`<math.h>`提供了数学运算函数。`<process.h>`中的`exit()`用于程序退出,`<io.h>`的`eof()`检查文件结束,`<math.h>`的`abs()`计算绝对值。 定义了一些常量,如`TRUE`和`FALSE`表示布尔值,`OK`和`ERROR`表示函数执行状态,以及`INFEASIBLE`表示无法执行的情况。`typedef`关键字用于创建新的类型别名,例如`Status`用于函数返回状态,`Boolean`表示布尔类型。 在`c2-1.h`中,定义了一个结构体`SqList`,代表顺序线性表的存储结构。它包括一个指向元素的指针`elem`,表示当前长度的变量`length`,以及当前分配的存储容量`listsize`。`LIST_INIT_SIZE`和`LIST_INCREMENT`定义了线性表初始分配的大小和每次增长的增量。 `bo2-1.c`包含了顺序表示的线性表的基本操作,如初始化(`InitList`)等。`InitList`函数用于构造一个空的顺序线性表,通过`malloc`动态分配内存,并初始化列表的长度和存储容量。 这段代码展示了如何在C语言中实现数据结构的基本操作,对于学习数据结构和理解动态内存分配、数组管理和基本操作的实现流程非常有帮助。这些基础知识对于任何涉及数据处理和算法实现的IT专业人士来说都是至关重要的。
2015-03-14 上传
1.1 数组和字符串 2 1.1.1 一维数组的倒置 2 范例1-1 一维数组的倒置 2 ∷相关函数:fun函数 1.1.2 一维数组应用 3 范例1-2 一维数组应用 3 1.1.3 一维数组的高级应用 5 范例1-3 一维数组的高级应用 5 1.1.4 显示杨辉三角 7 范例1-4 显示杨辉三角 7 ∷相关函数:c函数 8 1.1.5 魔方阵 9 范例1-5 魔方阵 9 1.1.6 三维数组的表示 14 范例1-6 三维数组的表示 14 ∷相关函数:InitArray函数 1.1.7 多项式的数组表示 17 范例1-7 多项式数组的表示 17 1.1.8 查找矩阵的马鞍点 19 范例1-8 查找矩阵的马鞍点 19 ∷相关函数:Get_Saddle函数 1.1.9 对角矩阵建立 21 范例1-9 对角矩阵建立 21 ∷相关函数:Store函数 1.1.10 三对角矩阵的建立 22 范例1-10 三对角矩阵的建立 22 ∷相关函数:Store函数 1.1.11 三角矩阵建立 24 范例1-11 三角矩阵建立 24 ∷相关函数:Store函数 1.1.12 对称矩阵的建立 25 范例1-12 对称矩阵的建立 25 ∷相关函数:store函数 1.1.13 字符串长度的计算 28 范例1-13 字符串长度的计算 28 ∷相关函数:strlen函数 1.1.14 字符串的复制 29 范例1-14 字符串的复制 29 ∷相关函数:strcpy函数 1.1.15 字符串的替换 31 范例1-15 字符串的替换 31 ∷相关函数:strrep函数 1.1.16 字符串的删除 33 范例1-16 字符串的删除 33 ∷相关函数:strdel函数 1.1.17 字符串的比较 35 范例1-17 字符串的比较 35 ∷相关函数:strcmp函数 1.1.18 字符串的抽取 36 范例1-18 字符串的抽取 36 ∷相关函数:substr函数 1.1.19 字符串的分割 38 范例1-19 字符串的分割 38 ∷相关函数:partition函数 1.1.20 字符串的插入 40 范例1-20 字符串的插入 40 ∷相关函数:insert函数 1.1.21 字符串的匹配 42 范例1-21 字符串的匹配 42 ∷相关函数:nfind函数 1.1.22 字符串的合并 43 范例1-22 字符串的合并 43 ∷相关函数:catstr函数 1.1.23 文本编辑 45 范例1-23 文本编辑 45 ∷相关函数:StrAssign函数 1.2 栈和队列 54 1.2.1 用数组仿真堆栈 54 范例1-24 用数组仿真堆栈 54 ∷相关函数:push函数 pop函数 1.2.2 用链表仿真堆栈 57 范例1-25 用链表仿真堆栈 57 ∷相关函数:push函数 pop函数 1.2.3 顺序栈公用 59 范例1-26 顺序栈公用 59 ∷相关函数:push函数 pop函数 1.2.4 进制转换问题 61 范例1-27 进制转换问题 61 ∷相关函数:MultiBaseOutput函数 1.2.5 顺序队列操作 64 范例1-28 顺序队列操作 64 ∷相关函数:push函数 pop函数 1.2.6 循环队列 66 范例1-29 循环队列 66 ∷相关函数:EnQueue函数 DeQueue函数 1.2.7 链队列的入队、出队 69 范例1-30 链队列入队、出队 69 ∷相关函数:push函数 pop函数 1.2.8 舞伴问题 71 范例1-31 舞伴问题 71 ∷相关函数:EnQueue函数 DeQueue函数 DancePartner函数 1.3 链表 75 1.3.1 头插法建立单链表 75 范例1-32 头插法建立单链表 75 ∷相关函数:createlist函数 1.3.2 限制链表长度建立单链表 77 范例1-33 限制链表长度建立长单链表 77 ∷相关函数:createlist函数 1.3.3 尾插法建立单链表 79 范例1-34 尾插法建立单链表 79 ∷相关函数:createlist函数 1.3.4 按序号查找单链表 80 范例1-35 按序号查找单链表 80 ∷相关函数:getnode函数 1.3.5 按值查找单链表 82 范例1-36 按值查找单链表 82 ∷相关函数:locatenode函数 1.3.6 链表的插入 84 范例1-37 链表的插入 84 ∷相关函数:insertnode函数 1.3.7 链表的删除 86 范例1-38 链表的删除 86 ∷相关函数:deletelist函数 1.3.8 归并两个单链表 88 范例1-39 归并两个单链表 88 ∷相关函数:concatenate函数 1.3.9 动态堆栈 90 范例1-40