嵌入式 数据结构 线性表 学习笔记
线性表线性结构的特点是1、存在唯一的一个被称作“第一个”的数据元素2、存在唯一的一个被称作“最后一个”的数据元素3、除第一个之外集合中的每个元素均只有一个前驱4、除最后一个以外集合中的每个数据元素均只有一个后继顺序表示和实现#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { ElemType *elem; int length; int listsize; } SqList; int InitList_Sq(SqList *L) { // 分配内存空间大小为LIST_INIT_SIZE 乘以ElemType的大小 L-elem (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType)); if (L-elem NULL) { return OVERFLOW; // 如果内存分配失败返回溢出错误 } L-length 0; // 初始化顺序表的长度为0 L-listsize LIST_INIT_SIZE; // 初始化顺序表的容量为LIST_INIT_SIZE return OK; }顺序表的插入int ListInsert_Sq(SqList *L, int i, ElemType e) { // 判断插入位置是否合法i的值应该在1 到L.length1 之间 if (i 1 || i L-length 1) { return ERROR; } // 如果顺序表已满需要重新分配内存空间 if (L-length L-listsize) { ElemType *newbase (ElemType *)realloc(L-elem, (L-listsize LISTINCREMENT) * sizeof(ElemType)); if (!newbase) { exit(OVERFLOW); // 内存分配失败退出程序 } // 更新顺序表的基地址和容量 L-elem newbase; L-listsize LISTINCREMENT; } // 找到插入位置的地址 ElemType *q (L-elem[i - 1]); // 将插入位置之后的元素向后移动一位 for (ElemType *p (L-elem[L-length - 1]); p q; --p) { *(p 1) *p; } // 将新元素插入到指定位置 *q e; L-length; // 更新顺序表的长度 return OK; }顺序表的删除int ListDelete_Sq(SqList *L, int i, ElemType *e) { // 判断删除位置是否合法i的值应该在1 到L.length之间 if (i 1 || i L-length) { return ERROR; } // 找到删除位置的地址 ElemType *p (L-elem[i - 1]); // 将删除位置的元素赋值给e *e *p; // 将删除位置之后的元素向前移动一位 ElemType *q L-elem L-length - 1; for (p; p q; p) { *(p - 1) *p; } // 更新顺序表的长度 --L-length; return OK; }顺序表的合并void MergeList_Sq(SqList *La, SqList *Lb, SqList *Lc) { ElemType *pa, *pb, *pc; ElemType *pa_last, *pb_last; // 初始化指针 pa 和 pb分别指向顺序表 La 和 Lb 的第一个元素 pa La-elem; pb Lb-elem; // 初始化 Lc 的大小并分配内存空间 Lc-listsize Lc-length La-length Lb-length; Lc-elem (ElemType *)malloc(Lc-listsize * sizeof(ElemType)); if (!Lc-elem) { exit(OVERFLOW); // 如果内存分配失败退出程序 } pc Lc-elem; // 初始化指针 pc指向顺序表 Lc 的第一个元素 // 初始化指针pa_last和pb_last分别指向顺序表 La 和 Lb的最后一个元素 pa_last La-elem La-length - 1; pb_last Lb-elem Lb-length - 1; while (pa pa_last pb pb_last) { // 合并两个顺序表直到其中一个顺序表遍历完 if (*pa *pb) { *pc *pa; // 将较小的元素放入 Lc } else { *pc *pb; } } while (pa pa_last) { // 如果pa没有到达最后一个元素将剩余的元素插入到Lc中 *pc *pa; } while (pb pb_last) { // 如果pb没有到达最后一个元素将剩余的元素插入到Lc中 *pc *pb; } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2456038.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!