b站 《数据结构与算法基础(青岛大学-王卓)》
所用教材《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著
同样,代码中名称有些按自己想法写的,只能给一些基本操作供大家参考
#include#define MAX 100 using namespace std; class Elem { //定义数据项 public: int name; }; class List { //定义线性表 public: Elem *list; int length; }; int InitList(List &L); //构造一个空线性表 void DestroyList(List& L); //销毁线性表 void ClearList(List &L); //清空线性表 int ListEmpty(List L); //判断线性表是否为空 int ListLength(List L); //返回线性表的长度 int GetElem(List L, int i, Elem& e); //返回线性表中第i给数据元素的值 int LocateElem(List L, Elem e); //查找元素并返回是第几个元素 int ListInsert(List &L, int i, Elem e); //插入元素 int ListDelete(List& L, int i, Elem e); //删除元素 void MergiList(List LA, List LB, List& LC); //两个非递增有序表合并成一个非递增有序表 int InitList(List &L) //构造一个空线性表 { L.list = new Elem [MAX]; if (!L.list) cerr << "分配储存空间失败"; L.length = 0; } void DestroyList(List& L) //销毁线性表 { if (L.list) delete L.list; } void ClearList(List &L) //清空线性表 { L.length = 0; } int ListEmpty(List L) //判断线性表是否为空 { if (L.length == 0) return 1; else return 0; } int ListLength(List L) //返回线性表的长度 { return L.length; } int GetElem(List L, int i, Elem& e) //返回线性表中第i给数据元素的值 { if (i<1 || i>L.length) { cerr << "数据不在线性表范围中"; return 0; } e = L.list[i - 1]; } int LocateElem(List L, Elem e) //查找元素并返回是第几个元素 { for (int i = 0; i < L.length; i++) if (L.list[i].name == e.name) return i + 1; return 0; } int ListInsert(List& L, int i, Elem e) //插入元素 { if (i<1 || i>L.length)return 0; if (L.length >= MAX)return 0; for (int j = L.length - 1; j > i - 1; j--) L.list[j + 1] = L.list[j]; L.list[i - 1] = e; L.length++; } int ListDelete(List& L, int i, Elem e) 删除元素 { if (i<1 || i>L.length)return 0; for (int j = i-1; j <= L.length; j++) L.list[j] = L.list[j + 1]; L.length--; } void MergiList(List LA, List LB, List& LC) //两个非递增有序表合并成一个非递增有序表 { Elem* pa = LA.list; Elem* pb = LB.list; LC.length = LA.length + LB.length; LC.list = new Elem [LC.length]; Elem* pc = LC.list; Elem *pa_last = &LA.list[LA.length - 1]; //设置指针指向最后一个元素 Elem* pb_last = &LB.list[LB.length - 1]; while (pa <= pa_last && pb <= pb_last) //两个表都非空 { if (pa->name <= pb->name)*pc++ = *pa++; //pc=pa,然后pc后移一位,pa后移一位 else *pc++ = *pb++; } while (pa <= pa_last) *pc++ = *pa++; //如果LB到表尾了,就把LA中元素依次放入LC中 while (pb <= pb_last) *pc++ = *pb++; //同上 } int main() { }



