标签:
用数组来描述一个链表
链表的大小是固定的
不能动态申请内存空间
数组首元素的游标指向第一个没有数据的下标地址,不存放数据
数组尾元素的游标指向第一个有数据的下标地址,不存放数据
未使用的数组称为备用链表
数组尾元素相当于头结点
最后一个有数据的元素游标为0
#include<iostream> using namespace std; const int size = 1000; //静态链表的数据结构 typedef struct Node { ElementType data; int cur; }staticLink[size]; //初始化静态链表 void initiate(staticLink L) { L[0].cur = size - 1; for (int i = 1; i < size - 1; i++) L[i].cur = i + 1; L[size - 1].cur = 0; } //获取备用链表元素位置 int Malloc_SLL(staticLink L) { int i = L[0].cur; if (i) { L[0].cur = L[i].cur; } return i; } //静态链表的插入操作 void insert(int i, staticLink L, ElementType e) { int k = size-1;//尾节点的位置 int pos = Malloc_SLL(L);//备用链表位置 int j; if (i<1 || i>Listlength(L) + 1) { return ERROR; } if (pos) { L[pos].data = e; for (j = 1; j <= i - 1; j++) k = L[k].cur; } L[pos].cur = L[k].cur; L[k].cur = pos; return OK; } //静态链表删除元素 void Delete(int i, staticLink L) { if (i<1 || i>ListLength(L) + 1) return ERROR; int pos = size-1; for (int j = 1; j <= i - 1; j++) pos = L[pos].cur; L[pos].cur = L[L[pos].cur].cur; } //按值查找 void Search1(staticLink L, ElementType e) { int pos = L[size - 1].cur; while ((pos > 0) && (pos < size - 1) && L[pos].data != e) { pos = L[pos].cur; } cout << pos << endl; } //按位查找,该位置是游标的位置,而不是下标的位置 void Search2(staticLink L, int pos) { int k = size-1; for (int i = 1; i < pos; i++) k = L[k].cur; cout << L[L[k].cur].data << endl; }
标签:
原文地址:http://www.cnblogs.com/KennyRom/p/5895404.html