2022年数据结构C语言实现系列——线性表 .pdf
《2022年数据结构C语言实现系列——线性表 .pdf》由会员分享,可在线阅读,更多相关《2022年数据结构C语言实现系列——线性表 .pdf(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、个人收集整理仅供参考学习1 / 16 数据结构 C 语言实现系列 线性表#include #include typedef int elemType; /*/ /* 以 下 是 关 于 线 性 表 顺 序 存 储 操 作 的16种 算 法*/ /*/ struct List elemType *list; int size; int maxSize; ; void againMalloc(struct List *L) /* 空间扩展为原来的2 倍,并由 p 指针所指向,原内容被自动拷贝到p 所指向的存储空间*/ elemType *p = realloc(L-list, 2 * L-maxS
2、ize * sizeof(elemType); if(!p) /* 分配失败则退出运行*/ printf( 存储空间分配失败!); exit(1); L-list = p; /* 使 list 指向新线性表空间*/ L-maxSize = 2 * L-maxSize; /* 把线性表空间大小修改为新的长度*/ /* 1.初始化线性表L,即进行动态存储空间分配并置L 为一个空表*/ void initList(struct List *L, int ms) /* 检查 ms 是否有效,若无效的则退出运行*/ if(ms maxSize = ms; /* 设置线性表空间大小为ms */ L-siz
3、e = 0; L-list = malloc(ms * sizeof(elemType); if(!L-list) printf( 空间分配失败!); exit(1); return; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 16 页个人收集整理仅供参考学习2 / 16 /* 2.清除线性表L 中的所有元素,释放存储空间,使之成为一个空表*/ void clearList(struct List *L) if(L-list != NULL) free(L-list); L-list = 0; L-size = L-maxSize
4、 = 0; return; /* 3.返回线性表L 当前的长度,若L 为空则返回*/ int sizeList(struct List *L) return L-size; /* 4.判断线性表L 是否为空,若为空则返回1, 否则返回0 */ int emptyList(struct List *L) if(L-size =0) return 1; else return 0; /* 5.返回线性表L 中第 pos 个元素的值,若pos 超出范围,则停止程序运行*/ elemType getElem(struct List *L, int pos) if(pos L-size) /* 若 po
5、s越界则退出运行*/ printf( 元素序号越界!); exit(1); return L-listpos - 1; /* 返回线性表中序号为pos 值的元素值*/ /* 6.顺序扫描(即遍历)输出线性表L 中的每个元素*/ void traverseList(struct List *L) int i; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 16 页个人收集整理仅供参考学习3 / 16 for(i = 0; i size; i+) printf(%d , L -listi); printf( ); return; /* 7
6、.从线性表L 中查找值与x 相等的元素,若查找成功则返回其位置,否则返回-1 */ int findList(struct List *L, elemType x) int i; for(i = 0; i size; i+) if(L-listi = x) return i; return -1; /* 8.把线性表L 中第 pos个元素的值修改为x 的值,若修改成功返回1,否则返回0 */ int updatePosList(struct List *L, int pos, elemType x) if(pos L-size) /* 若 pos越界则修改失败*/ return 0; L-li
7、stpos - 1 = x; return 1; /* 9.向线性表L 的表头插入元素x */ void inserFirstList(struct List *L, elemType x) int i; if(L-size = L-maxSize) againMalloc(L); for(i = L-size - 1; i = 0; i-) L-listi + 1 = L -listi; L-list0 = x; L-size +; return; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 16 页个人收集整理仅供参考学习4 /
8、 16 /* 10.向线性表L 的表尾插入元素x */ void insertLastList(struct List *L, elemType x) if(L-size = L -maxSize) /* 重新分配更大的存储空间*/ againMalloc(L); L-listL-size = x; /* 把 x 插入到表尾*/ L-size+; /* 线性表的长度增加*/ return; /* 11.向线性表L 中第 pos 个元素位置插入元素x,若插入成功返回,否则返回*/ int insertPosList(struct List *L, int pos, elemType x) int
9、 i; if(pos L-size + 1) /* 若 pos 越界则插入失败*/ return 0; if(L-size = L-maxSize) /* 重新分配更大的存储空间*/ againMalloc(L); for(i = L-size - 1; i = pos - 1; i-) L-listi + 1 = L-listi; L-listpos - 1 = x; L-size+; return 1; /* 12.向有序线性表L 中插入元素x,使得插入后仍然有序*/ void insertOrderList(struct List *L, elemType x) int i, j; /*
10、 若数组空间用完则重新分配更大的存储空间*/ if(L-size = L-maxSize) againMalloc(L); /* 顺序查找出x 的插入位置*/ for(i = 0; i size; i+) if(x listi) break; /* 从表尾到下标i 元素依次后移一个位置,把 i 的位置空出来*/ for(j = L-size - 1; j = i; j-) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 16 页个人收集整理仅供参考学习5 / 16 L-listj+1 = L-listj; /* 把 x 值赋给下标为i
11、的元素*/ L-listi = x; /* 线性表长度增加1 */ L-size+; return; /* 13.从线性表L 中删除表头元素并返回它,若删除失败则停止程序运行*/ elemType deleteFirstList(struct List *L) elemType temp; int i; if(L -size = 0) printf( 线性表为空,不能进行删除操作!); exit(1); temp = L-list0; for(i = 1; i size; i+) L-listi-1 = L-listi; L-size-; return temp; /* 14.从线性表L 中删
12、除表尾元素并返回它,若删除失败则停止程序运行*/ elemType deleteLastList(struct List *L) if(L -size = 0) printf( 线性表为空,不能进行删除操作!); exit(1); L-size-; return L -listL-size; /* 返回原来表尾元素的值*/ /* 15.从线性表L 中删除第pos 个元素并返回它,若删除失败则停止程序运行*/ elemType deletePosList(struct List *L, int pos) elemType temp; int i; if(pos L-size) /* pos 越界
13、则删除失败*/ printf(pos 值越界,不能进行删除操作!); exit(1); temp = L-listpos-1; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 16 页个人收集整理仅供参考学习6 / 16 for(i = pos; i size; i+) L-listi-1 = L-listi; L-size-; return temp; /* 16.从线性表L 中删除值为x 的第一个元素,若成功返回1,失败返回0 */ int deleteValueList(struct List *L, elemType x) in
14、t i, j; /* 从线性表中顺序查找出值为x 的第一个元素*/ for(i = 0; i size; i+) if(L-listi = x) break; /* 若查找失败,表明不存在值为x 的元素,返回0 */ if(i = L-size) return 0; /* 删除值为x 的元素 L-listi */ for(j = 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
15、 List L; initList(&L, 5); for(i = 0; i 10; i+) insertLastList(&L, ai); insertPosList(&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); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第
16、 6 页,共 16 页个人收集整理仅供参考学习7 / 16 traverseList(&L); deleteFirstList(&L); deleteFirstList(&L); deleteLastList(&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
17、12 #define MM 20 typedef int elemType ; /*/ /* 以下是关于线性表链接存储(单链表)操作的16 种算法*/ /*/ struct sNode /* 定义单链表结点类型*/ elemType data; struct sNode *next; ; /* 1.初始化线性表,即置单链表的表头指针为空*/ void initList(struct sNode* *hl) *hl = NULL; return; /* 2.清除线性表L 中的所有元素,即释放单链表L 中所有的结点,使之成为一个空表*/ void clearList(struct sNode* *
18、hl) /* cp 和 np 分别作为指向两个相邻结点的指针*/ struct sNode *cp, *np; cp = *hl; /* 遍历单链表,依次释放每个结点*/ while(cp != NULL) np = cp-next; /* 保存下一个结点的指针*/ free(cp); cp = np; *hl = NULL; /* 置单链表的表头指针为空*/ return; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 16 页个人收集整理仅供参考学习8 / 16 /* 3.返回单链表的长度*/ int sizeList(struc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年数据结构C语言实现系列线性表 2022 数据结构 语言 实现 系列 线性
限制150内