C++ 静态链表
来源:互联网 发布:五大联赛数据 编辑:程序博客网 时间:2024/05/29 19:19
C++与数据结构系列依然在继续~~~
今天研究了一下数据结构中的静态链表。
静态链表是给没有指针的语言设计的一种实现单链表的方法。
对于每一个结构体,有数据和游标,游标就相当于该数据的地址,那这样子就显得简单了,删除、插入操作思想与链表是一样的。其优点主要是在插入和删除上更方便,但是没有解决连续储存分配带来的表长难以确定的问题,失去了顺序存储结构随机存取的特性。
#include<iostream>#define OK 1#define ERROR 0#define MAXSIZE 20using namespace std;typedef int Status;typedef char ElemType;typedef struct{ElemType data;int cur;}Component,StaticLinkList[MAXSIZE];//打印元素Status visit(ElemType c) { cout<<c; return OK; } //初始化链表Status InitList(StaticLinkList space){int i;srand ( time(0) );for(i=0;i<MAXSIZE-1;i++) space[i].cur = i+1; // space[i].data = rand()%100+1; // cout<<" "<<space[i].data;space[MAXSIZE-1].cur = 0;return OK ;}//将下表为k的空闲结点回收到备用链表void Free_SSL(StaticLinkList space,int k){space[k].cur = space[0].cur;space[0].cur = k;}//查找静态链表L中有多少个数据元素 int ListLength(StaticLinkList L){int j=0;int i=L[MAXSIZE-1].cur;while(i){i = L[i].cur;j++;}return j;}//自定义malloc函数int Malloc_SSL(StaticLinkList space){int i = space[0].cur;if(space[0].cur)space[0].cur = space[i].cur;return i;}//在L中第i个元素之前插入新的数据元素eStatus ListInsert(StaticLinkList L,int i,ElemType e){int j,k,l;k = MAXSIZE -1;if(i<1 || i>ListLength(L) + 1)return ERROR;j = Malloc_SSL(L);if(j){L[j].data = e;for(l = 1; l <= i-1; l++)k = L[k].cur;L[j].cur = L[k].cur;L[k].cur = j;cout<<"插入成功"<<endl;return OK;}return ERROR;}//将L中的第i个数据元素删除Status ListDelete(StaticLinkList L, int i){int j,k;k = MAXSIZE -1;if(i<1 || i>ListLength(L) + 1)return ERROR;k = MAXSIZE -1;for(j=1;j<=i-1;j++)k = L[k].cur;j = L[k].cur;L[k].cur = L[j].cur;Free_SSL(L,j);cout<<"删除成功"<<endl;return OK ;}Status ListTraverse(StaticLinkList L) { int j=0; int i=L[MAXSIZE-1].cur; while(i) { visit(L[i].data); i=L[i].cur; j++; } return j; cout<<endl; return OK; } int main(){StaticLinkList L; Status i; i=InitList(L); cout<<"初始化L后:L.length="<<ListLength(L)<<endl; i=ListInsert(L,1,'F'); i=ListInsert(L,1,'E'); i=ListInsert(L,1,'D'); i=ListInsert(L,1,'B'); i=ListInsert(L,1,'A'); cout<<"插入后:L.length="<<ListLength(L)<<endl; cout<<"在L的表头依次插入FEDBA后:L为"<<endl; ListTraverse(L); i=ListInsert(L,3,'C'); cout<<"在L的“B”与“D”之间插入“C”后:L为"<<endl; ListTraverse(L); i=ListDelete(L,1); cout<<"在L的删除“A”后:L为"<<endl; ListTraverse(L); cout<<endl; return 0; }
0 0
- 静态链表 C实现
- 静态链表 C实现
- C静态链表 数据结构!
- 静态链表 C实现
- 静态链表实现(c语言)
- C语言数据结构 静态链表
- 静态链表C语言实现详解
- 用C语言建立静态链表
- C语言实现静态链表
- 静态链表--C语言实现
- 静态链表 c语言实现
- 003.静态链表C实例
- c语言静态链表基础
- C语言静态链表的实现
- C 静态链表实现逻辑
- 【C语言】静态顺序表
- C++_010_数据结构_静态链表_静态双链表普通存储版
- C链表之创建简单静态链表
- 在CentOS 6.3中安装与配置Tomcat-7方法
- Android断点续传原理
- 文件路径分解与批处理文件遍历
- 怎样查看正在运行的进程所在的全路径
- iOS_获取&区分iOS锁屏与Home事件
- C++ 静态链表
- Android--详解Android动画之Tween Animation
- 自定义的照相机视图
- 关于armhf (hard-float ABI for ARM)
- Android NDK支持STL的一些注意事项
- float double 与0比较
- POJ 1511 Invitation Cards 图论题解
- ubuntu 下mkfs.jffs2安装
- js正则表达式语法