C++ 实现静态链表的简单实例
用数组描述的链表,即称为静态链表。
在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标cur。
这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。
下图表示了静态链表的一中存储结构:
图中用彩色途上的是两个头结点,不存放数据,分别用来记录第一个备用节点和第一个数据节点的下标。
下面给出静态链表的C++实现代码:
首先给出头文件:StaticList.h:
#include#include using namespace std; #define MAXSIZE 20 // 静态链表(数组)默认长度 #define ElemType int // 值类型 class StaticList; //节点类 typedef class StaticListNode // 静态链表的节点类型(数组元素类型) { friend class StaticList; private: ElemType data;// 值域 int cur; // 游标 (指示当前节点的下一个元素下标) }StaticListNode; // 静态链表类 class StaticList { public: StaticList() { for(int i = 2; i 下面是测试代码:Main.cpp
#include"StaticList.h" void main() { StaticList SL; StaticList SL1; //测试merge() StaticList SL2; SL1.push_back(1); SL1.push_back(9); SL1.push_back(0); SL1.push_back(6); SL1.push_back(999); SL2.push_back(5); SL2.push_back(8); SL2.push_back(100); ElemType Item = 0; int select = 1; while(select) { cout<<"********************************************"<>select; switch(select) { case 1: cout<<"输入要尾插的数据:(-1结束)>"; while(cin>>Item && -1 != Item) SL.push_back(Item); break; case 2: cout<<"输入要头插的数据:(-1结束)>"; while(cin>>Item && -1 != Item) SL.push_front(Item); break; case 3: SL.show_list(); break; case 4: SL.pop_back(); break; case 5: SL.pop_front(); break; case 6: cout<<"输入要插入的数据:>"; cin>>Item; SL.insert_val(Item); break; case 7: cout<<"链表长度为:"< "; cin>>Item; SL.find(Item); break; case 9: SL.merge(SL1, SL2); break; case 10: cout<<"输入要删除的数据:>"; cin>>Item; SL.delete_val(Item); break; case 11: SL.sort(); break; case 12: SL.reserve(); break; case 13: SL.next(0); break; case 14: SL.prio(0); break; case 15: SL.clear(); break; case 16: SL.~StaticList(); break; default: break; } } } 下面是测试截图:
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!



