C++实现静态链表
来源:互联网 发布:兰州知豆电动车租赁 编辑:程序博客网 时间:2024/05/21 06:21
#include<iostream>using namespace std;const size_t MAXSIZE =100;typedef struct SListNode {int data;size_t cur;}StaticList[MAXSIZE]; //初始化链表函数 void InitSList(StaticList & space ) { for(int i=0;i< MAXSIZE -1 ;i++) { space[i].cur = i+1; } space[MAXSIZE -1].cur = 0;//构成循环 } //分配节点(只需要返回被分配节点在数组中的下标即可) int Malloc_SL(StaticList & space ) { int i = space[0].cur; if(i) { space[0].cur = space[i].cur;//把i节点从空闲链表中删除 } return i; } //回收节点到空闲链表 void Free_SLNode(StaticList & space,int t) { space[t].cur = space[0].cur; space[0].cur = t; } //插入 bool insert(StaticList & space,int h,int m,int t)//在第t个元素之前插入一个下标值为m的新节点 { if(t<=0) { return false; } int i = h; int n = 0;//计数器 while(i) { if(n == t-1 && space[i].cur)//找到插入节点{space[m].cur = space[i].cur;space[i].cur = m;return true;}i = space[i].cur;n++; } return false; } //删除第n个节点 bool dele(StaticList & space,int h, int n) { if(n<0) return false; int i=h; int m =0; while(i) { if(m == n-1) { int t = space[i].cur; space[i].cur = space[t].cur; Free_SLNode(space,t);//回收被删除的节点 return true; } i = space[i].cur; m++; } return false; } //在表尾增加一个新节点 bool add(StaticList & space,int h,int m)//m代表新增加节点的下标值,h表示数据链表的头结点 { int i = h; while(space[i].cur) { i = space[i].cur; } space[i].cur = m; space[m].cur = 0; return true; }int main(){//定义一个静态链表StaticList MyList;InitSList(MyList);//分配一个新节点做为数据节点 空闲节点的默认头节点为0int h = Malloc_SL(MyList);MyList[h].cur = 0;//添加新节点int t = Malloc_SL(MyList);MyList[t].data = 1;add(MyList,h,t);t = Malloc_SL(MyList);MyList[t].data = 2;add(MyList,h,t);t = Malloc_SL(MyList);MyList[t].data = 3;add(MyList,h,t);//遍历并输出该链表上的所有数据cout<<"遍历并输出该链表上的所有数据:"<<endl;int i = MyList[h].cur;while (i){cout<<MyList[i].data<<" ";i = MyList[i].cur;}cout<<endl;//在第2个元素之前插入一个新节点cout<<"在第2个元素之前插入一个值为5的新节点:"<<endl;t = Malloc_SL(MyList);MyList[t].data = 5;insert(MyList,h,t,2); i = MyList[h].cur;while (i){cout<<MyList[i].data<<" ";i = MyList[i].cur;}cout<<endl;//删除第2个节点cout<<"删除第2节点:"<<endl;dele(MyList,h,2);i = MyList[h].cur;while (i){cout<<MyList[i].data<<" ";i = MyList[i].cur;}cout<<endl;}
3 3
- 静态链表 C实现
- 静态链表 C实现
- 静态链表 C实现
- 静态链表实现(c语言)
- 静态链表C语言实现详解
- C语言实现静态链表
- 静态链表--C语言实现
- 静态链表 c语言实现
- C语言静态链表的实现
- C 静态链表实现逻辑
- 静态链表的实现与操作(C语言实现)
- c语言实现的静态链表 多指教
- c语言实现静态链表的基本操作
- C语言实现静态顺序表
- 【C语言】实现静态顺序表
- c语言实现静态顺序表
- C::静态顺序表的实现
- 静态顺序表------C语言实现
- 黑马程序员—Objective-C基础_内存管理(2)
- 《Apache HttpClient 4.3开发指南》
- 在word中实现代码的语法高亮
- 文件一定要正常关闭,才能进行下一次读取
- 《用Apache HttpClient实现URL重定向》
- C++实现静态链表
- 猜数字游戏
- Debian下设置MySQL默认编码为UTF-8
- [LeetCode] Reverse Words in a String
- Spark:一个高效的分布式计算系统
- 黑马程序员—C语言_基本数据类型
- 数据结构 哈希表 字典树
- 黑马程序员—Objective-C基础_基本语法
- 关于mysql取出数据库中连续日期(值)的例子,实现Oracle的row_number()