2022年数据结构C语言实现系列——线性表.docx
《2022年数据结构C语言实现系列——线性表.docx》由会员分享,可在线阅读,更多相关《2022年数据结构C语言实现系列——线性表.docx(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习数据结构 C 语言实现系列 线性表#include #include typedef int elemType; /*/ /* 以 下 是 关 于 线 性 表 顺 序 存 储 操 作 的16种 算 法*/ /*/ struct List elemType *list; int size; int maxSize; ; void againMallocstruct List *L /* 空间扩展为原先的2 倍,并由 p 指针所指向,原内容被自动拷贝到p 所指向的储备空间 */ elemType *p = reallocL
2、-list, 2 * L-maxSize * sizeofelemType; if.p /* 安排失败就退出运行 */ printf 储备空间安排失败!; exit1; L-list = p; /* 使 list 指向新线性表空间 */ L-maxSize = 2 * L-maxSize; /* 把线性表空间大小修改为新的长度 */ /* 1. 初始化线性表L,即进行动态储备空间安排并置L 为一个空表*/ void initListstruct List *L, int ms /* 检查 ms 是否有效,如无效的就退出运行 */ ifms maxSize = ms; /* 设置线性表空间大小为
3、ms */ L-size = 0; L-list = mallocms * sizeofelemType; if.L-list printf 空间安排失败!; exit1; return; 1 / 16 名师归纳总结 - - - - - - -第 1 页,共 16 页精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习 /* 2. 清除线性表L 中的全部元素,释放储备空间,使之成为一个空表*/ void clearListstruct List *L ifL-list .= NULL freeL-list; L-list = 0; L-size = L-maxSize
4、= 0; return; /* 3. 返回线性表L 当前的长度,如L 为空就返回*/ int sizeListstruct List *L return L-size; /* 4. 判定线性表L 是否为空,如为空就返回1, 否就返回 0 */ int emptyListstruct List *L ifL-size =0 return 1; else return 0; /* 5. 返回线性表L 中第 pos 个元素的值,如pos 超出范畴,就停止程序运行*/ elemType getElemstruct List *L, int pos ifpos L-size /* 如 pos 越界就退出
5、运行*/ printf 元素序号越界!; exit1; return L-listpos - 1; /* 返回线性表中序号为pos 值的元素值*/ /* 6. 次序扫描(即遍历)输出线性表L 中的每个元素*/ void traverseListstruct List *L int i; 2 / 16 名师归纳总结 - - - - - - -第 2 页,共 16 页精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习fori = 0; i size; i+ printf%d , L -listi; printf ; return; /* 7. 从线性表L 中查找值与x 相
6、等的元素,如查找胜利就返回其位置,否就返回-1 */ int findListstruct List *L, elemType x int i; fori = 0; i size; i+ ifL-listi = x return i; return -1; /* 8. 把线性表L 中第 pos 个元素的值修改为x 的值,如修改胜利返回1,否就返回0 */ int updatePosListstruct List *L, int pos, elemType x ifpos L-size /* 如 pos 越界就修改失败*/ return 0; L-listpos - 1 = x; return
7、1; /* 9. 向线性表L 的表头插入元素x */ void inserFirstListstruct List *L, elemType x int i; ifL-size = L-maxSize againMallocL; fori = L-size - 1; i = 0; i- L-listi + 1 = L -listi; L-list0 = x; L-size +; return; 3 / 16 名师归纳总结 - - - - - - -第 3 页,共 16 页精选学习资料 - - - - - - - - - /* 10. 向线性表 L 的表尾插入元素个人收集整理仅供参考学习x */
8、 void insertLastListstruct List *L, elemType x ifL-size = L -maxSize /* 重新安排更大的储备空间*/ againMallocL; L-listL-size = x; /* 把 x 插入到表尾 */ L-size+; /* 线性表的长度增加 */ return; /* 11. 向线性表 L 中第 pos 个元素位置插入元素x,如插入胜利返回,否就返回*/ int insertPosListstruct List *L, int pos, elemType x int i; ifpos L-size + 1 /* 如 pos 越
9、界就插入失败*/ return 0; ifL-size = L-maxSize /* 重新安排更大的储备空间*/ againMallocL; fori = L-size - 1; i = pos - 1; i- L-listi + 1 = L-listi; L-listpos - 1 = x; L-size+; return 1; /* 12. 向有序线性表L 中插入元素x,使得插入后仍旧有序*/ void insertOrderListstruct List *L, elemType x int i, j; /* 如数组空间用完就重新安排更大的储备空间 */ ifL-size = L-max
10、Size againMallocL; /* 次序查找出x 的插入位置*/ fori = 0; i size; i+ ifx listi break; /* 从表尾到下标i 元素依次后移一个位置,把 i 的位置空出来*/ forj = L-size - 1; j = i; j- 4 / 16 名师归纳总结 - - - - - - -第 4 页,共 16 页精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习L-listj+1 = L-listj; /* 把 x 值赋给下标为i 的元素*/ L-listi = x; /* 线性表长度增加 1 */ L-size+; retu
11、rn; /* 13. 从线性表 L 中删除表头元素并返回它,如删除失败就停止程序运行 */ elemType deleteFirstListstruct List *L elemType temp; int i; ifL -size = 0 ; printf 线性表为空,不能进行删除操作!exit1; temp = L-list0; fori = 1; i size; i+ L-listi-1 = L-listi; L-size-; return temp; /* 14. 从线性表 L 中删除表尾元素并返回它,如删除失败就停止程序运行 */ elemType deleteLastListstr
12、uct List *L ifL -size = 0 printf 线性表为空,不能进行删除操作!; exit1; L-size-; return L -listL-size; /* 返回原先表尾元素的值*/ /* 15. 从线性表 L 中删除第 pos 个元素并返回它,如删除失败就停止程序运行 */ elemType deletePosListstruct List *L, int pos elemType temp; int i; ifpos L-size /* pos 越界就删除失败 */ printfpos 值越界,不能进行删除操作!; exit1; temp = L-listpos-1
13、; 5 / 16 名师归纳总结 - - - - - - -第 5 页,共 16 页精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习fori = pos; i size; i+ L-listi-1 = L-listi; L-size-; return temp; /* 16. 从线性表 L 中删除值为x 的第一个元素,如胜利返回1,失败返回0 */ int deleteValueListstruct List *L, elemType x int i, j; /* 从线性表中次序查找出值为x 的第一个元素*/ fori = 0; i size; i+ ifL-list
14、i = x break; /* 如查找失败,说明不存在值为x 的元素,返回0 */ ifi = L-size return 0; /* 删除值为 x 的元素 L-listi */ forj = i + 1; j size; j+ L-listj-1 = L-listj; L-size-; return 1; /*/ void main int a10 = 2, 4, 6, 8, 10, 12, 14, 16, 18, 20; int i; struct List L; initList&L, 5; fori = 0; i 10; i+ insertLastList&L, ai; insertP
15、osList&L, 11, 48; insertPosList&L, 1, 64; printf%d , getElem&L, 1; traverseList&L; printf%d , findList&L, 10; updatePosList&L, 3, 20; printf%d , getElem&L, 3; 6 / 16 名师归纳总结 - - - - - - -第 6 页,共 16 页精选学习资料 - - - - - - - - - 个人收集整理 仅供参考学习traverseList&L; deleteFirstList&L; deleteFirstList&L; deleteLast
16、List&L; deleteLastList&L; deletePosList&L, 5; ;deletePosList&L, 7; printf%d , sizeList&L; printf%d , emptyList&L; traverseList&L; clearList&L; return 0; #include #include #define NN 12 #define MM 20 typedef int elemType ; /*/ /* 以下是关于线性表链接储备(单链表)操作的16 种算法*/ /*/ struct sNode /* 定义单链表结点类型*/ elemType d
17、ata; struct sNode *next; ; /* 1. 初始化线性表,即置单链表的表头指针为空 */ void initListstruct sNode* *hl *hl = NULL; return; /* 2. 清除线性表L 中的全部元素,即释放单链表L 中全部的结点,使之成为一个空表*/ void clearListstruct sNode* *hl /* cp 和 np 分别作为指向两个相邻结点的指针 */ struct sNode *cp, *np; cp = *hl; /* 遍历单链表,依次释放每个结点 */ whilecp .= NULL np = cp-next; /
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 数据结构 语言 实现 系列 线性
限制150内