数据结构:静态链表

来源:互联网 发布:灭火器配置计算软件 编辑:程序博客网 时间:2024/05/16 17:32
<span style="font-family: Arial, Helvetica, sans-serif;"> #include <iostream></span>
using namespace std;//线性表静态存储结构#define MAXSIZE 1000  //假设链表的最大长度为1000typedef int ElemType;typedef struct  {ElemType data;int cur; //游标(Cursor),为0时表示无指向}StaticLinkList[MAXSIZE];//对数组第一个和最后一个元素作特殊处理,不存数据。我们//通常把未被使用的数组元素称为备用链表。而数组第一个元素//,即下标为0的元素的cur就存放备用链表的第一个结点的下标。//而数组的最后一个元素的cur则存放第一个有数值的元素的下标。//将一维数组space中各分量链成一个备用链表void InitSLList( StaticLinkList space ){for ( int i = 0; i < MAXSIZE-1; ++i ){space[i].cur = i + 1;}//space[0].cur = 1;指向备用链表的第一个结点,第0个与最后一个不存数据space[MAXSIZE-1].cur = 0; //目前静态表为空,最后一个元素的cur为0,相当于头结点}//若备用空间非空,则返回分配的结点下标,否则返回0,分配失败int Malloc_SLL( StaticLinkList space ){int i = space[0].cur;if ( space[0].cur ){space[0].cur = space[i].cur;}return i;}//将下标为k的空闲结点回收到备用链表void Free_SLL( StaticLinkList space, int k ){space[k].cur = space[0].cur;space[0].cur = k;}//求长度int ListLength( StaticLinkList L ){int len = 0;int i = L[MAXSIZE-1].cur;while ( i ){i = L[i].cur;++len;}return len;}//在第i个元素之前插入新的数据元素evoid ListInsert( StaticLinkList L, int i, ElemType e ){int k = MAXSIZE - 1; //k首先是最后一个元素的下标,相当于指向头结点了if ( i < 1 || i > ListLength( L ) + 1 )return;int j = Malloc_SLL( L );  //分配空间if ( !j )return;L[j].data = e;for ( int m = 1; m <= i-1; ++m )//找到第i个元素的之前的位置{k = L[k].cur;}L[j].cur = L[k].cur;L[k].cur = j;}//删除在L第i个数据元素void ListDelete( StaticLinkList L, int i ){int k = MAXSIZE - 1;if ( i < 1 || i > ListLength( L ) )return;for ( int j = 1; j <= i-1; ++j ){k = L[k].cur;}int m = L[k].cur;L[k].cur = L[m].cur;Free_SLL( L, m );}//遍历静态表(打印其所有元素)void ListTraverse( StaticLinkList L ){int k = MAXSIZE - 1;int i = L[k].cur;while ( i ){cout << L[i].data << " ";i = L[i].cur;}cout << endl;}int main(){StaticLinkList L;//初始化静态链表InitSLList( L );  //插入5个数据(1~5)cout << "插入5个数据(1~5)..." << endl;system("pause");for ( int i = 1; i <= 5; ++i ){ListInsert( L, i, i );}cout << endl;//遍历静态表(打印其所有元素)cout << "遍历静态表(打印其所有元素)..." << endl;system("pause");ListTraverse( L );cout << endl;//删除第3个元素cout << "删除第3个元素..." << endl;system("pause");ListDelete( L, 3 );cout << endl;//遍历静态表(打印其所有元素)cout << "遍历静态表(打印其所有元素)..." << endl;system("pause");ListTraverse( L );cout << endl;//在第3个元素之前插入数据19cout << "在第3个元素之前插入数据19..." << endl;system("pause");ListInsert( L, 3,19 );cout << endl;//当前长度cout << "当前长度:";cout << ListLength( L ) << endl << endl;//遍历静态表(打印其所有元素)cout << "遍历静态表(打印其所有元素)..." << endl;system("pause");ListTraverse( L );cout << endl;return 0;}


图片 

0 0
原创粉丝点击