b站 《数据结构与算法基础(青岛大学-王卓)》
所用教材《数据结构C语言版第二版》 中国工信出版集团 人民邮电出版社出版 严蔚敏 编著
代码中名称有些按自己想法写的,只能给一些基本操作供大家参考
#includeusing namespace std; class Elem { public: int name; }; class Lnode { public: Elem data; Lnode* next; }; void initlist(Lnode *&L); //创建链表 void DestroyList(Lnode *&L); //删除链表 void ClearList(Lnode* &L); //清空链表 int ListLength(Lnode* L); //返回链表的表长 int GetElem(Lnode* L, int i, Elem& e); //查找第i个元素并返回其值 int LocateElem(Lnode* L, Elem e); //查找与e相同的值并返回是第几个元素 int ListInsert(Lnode* &L, int i, Elem e); //插入1个结点 int ListDelete(Lnode* &L, int i); //删除一个结点 void CreateList_First(Lnode* &L, int n); //创建一个带有头结点的n个结点的链表(头插法建立链表) void CreateList_Last(Lnode* &L, int n); //尾插法建立链表 void MergeList(Lnode* LA, Lnode* LB, Lnode* &LC); //合并链表 void initlist(Lnode* &L) //创建链表 { L = new Lnode; L->next= nullptr; } void DestroyList(Lnode* &L) //删除链表 { Lnode* p; while (L) { p = L; L = L->next; delete p; } } void ClearList(Lnode* &L) //清空链表 { Lnode* p, * q; p = L->next; while (p) { q = p->next; delete p; p = q; } L->next = nullptr; } int ListLength(Lnode* L) //返回链表的表长 { Lnode* p = L->next; int Length = 0; while (p) { Length++; p = p->next; } return Length; } int GetElem(Lnode* L, int i, Elem& e) //查找第i个元素并返回其值 { int j = 1; Lnode* p=L->next; while(p&&jnext; j++; } if (!p || i < j) { cerr << ("您查找的数不存在"); return 1; } e = p->data; } int LocateElem(Lnode* L, Elem e) //查找与e相同的值并返回是第几个元素 { Lnode* p = L->next; int i = 1; while (p && p->data.name != e.name) { p = p->next; i++; } return i; if (!p) return 1; } int ListInsert(Lnode* &L, int i, Elem e) //插入1个结点 { Lnode* p = L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p||j>i-1)return 1; //i大于表长+1或i<1,就error Lnode *s = new Lnode; s->data = e; s->next = p->next; p->next = s; } int ListDelete(Lnode* &L, int i) //删除一个结点 { Lnode*q,* p=L; int j = 0; while (p && j < i - 1) { p = p->next; j++; } if (!p || j > i - 1)return 1; q = p->next; p->next = p->next->next; delete q; } void CreateList_First(Lnode* &L, int n) //头插法建立链表 { L = new Lnode; L->next = nullptr; //建立一个带头结点的单链表 for (int i = n; i > 0; i--) { Lnode* p = new Lnode; cin >> p->data.name; p->next = L->next; //插入到表头 L->next = p; } } void CreateList_Last(Lnode*& L, int n) //尾插法建立链表 { L = new Lnode; L->next = nullptr; Lnode* r = L; //尾指针r指向链表的尾结点 for (int i = 0; i < n; i++) { Lnode* p = new Lnode; cin >> p->data.name; r->next = p; p->next = nullptr; r = p; } } void MergeList(Lnode* LA, Lnode* LB, Lnode* &LC) //合并链表 { Lnode* pa = LA->next; Lnode* pb = LB->next; LC = LA; Lnode* pc = LC; while (pa && pb) { if(pa->data.name <= pb->data.name) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } pc->next = pa ? pa : pb; //插入剩余段 delete LB; //删除剩下的头结点 } int main() { }



