【数据结构】静态链表
来源:互联网 发布:浩辰cad建筑软件 编辑:程序博客网 时间:2024/05/17 03:15
数据结构之静态链表实现
前言
静态链表,是一种巧妙的数据结构实现方式。
静态链表:
每个节点有一个数据域(data),用来存放有用的数据信息;
还有一个下标域(cur),用来指示下一个元素的下标位置。
我们都知道链式线性表的优势在于插入和删除元素,时间复杂度都是O(1),因为不需要像顺序存储结构的线性表那样在插入和删除时需要移动大量的元素。
而静态链表的实现就弥补了这样的不足,我们以下标的方式来代替链式结构中使用的的指针,从而达到减少时间复杂度的功能。
分析
实现静态链表
下面是代码,实现了最基本的几个函数,包括插入元素、删除元素、获取和释放备用链表空间。
读者可以自行添加其他的操作函数。
//====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename: StaticList.c // description: a demo to display StaticList// // created by SCOTT at 02/10/2015// http://blog.csdn.net/scottly1 // //====================================================================== #include <stdio.h>#include <stdlib.h>#define TRUE1#define FALSE0#define MAX_LEN100typedef int Status;typedef int ElemType;typedef struct _tag_staticlist{ElemType data;int cur;}StaticList, List[MAX_LEN];/* Init StaticList */Status InitList(StaticList * list){int i = 0;for(i=0; i<MAX_LEN - 1; i++){list[i].cur = i + 1;list[i].data = 0; //此处初始化为0 是为了方便观看 实际中ElemType不一定是int型}list[MAX_LEN-1].cur = 0;list[MAX_LEN-1].data = 0;return TRUE;}/* Display StaticList */void DisplayList(StaticList * list){int i = 0;for(i=0; i<MAX_LEN; i++){printf("%d.cur = %d, %d.data = %d\n", i, list[i].cur, i, list[i].data);}return ;}/* Malloc StaticList, Get Free Space */int Malloc_SL(StaticList * list){int ret = 0;ret = list[0].cur;list[0].cur = list[ret].cur; // 指向下一个节点的curreturn ret;}/* Free StaticList, Free Space */Status Free_SL(StaticList * list, int j){list[j].cur = list[0].cur; // 保存备用链表第一个节点下一个节点curlist[0].cur = j; // j成为备用链表的首节点下标return TRUE;}/* Insert StaticList */Status InsertList(StaticList * list, int pos, ElemType data){int i = 0;int j = 0;int k = MAX_LEN - 1;if(pos < 1 || NULL == list || pos >= MAX_LEN - 1)return FALSE;j = Malloc_SL(list); // Malloc curlist[j].data = data;// Insert datafor(i=1; i<pos; i++){k = list[k].cur;}list[j].cur = list[k].cur;list[k].cur = j;return TRUE;}Status InsertList(StaticList * list, int pos, ElemType *ret){int i = 0;int j = 0;int k = MAX_LEN - 1;if(pos < 1 || NULL == list || pos >= MAX_LEN - 1)return FALSE;for(i=1; i<pos; i++){k = list[k].cur;}j = list[k].cur;*ret = list[j].data;Free_SL(list, j);return TRUE;}int main(){List L ;InitList(L);DisplayList(L);ElemType ret;printf("=============\n");InsertList(L, 1, 11);InsertList(L, 2, 22);InsertList(L, 3, 33);InsertList(L, 4, 44);InsertList(L, 5, 55);InsertList(L, 3, 66);DisplayList(L);printf("=============\n");InsertList(L, 1, &ret);DisplayList(L);printf("%d has been removed!\n", ret);return 0;}
运行结果:
原创文章,转载请著名出处:http://blog.csdn.net/scottly1/article/details/43669933
1 0
- 【数据结构】静态链表
- 数据结构:静态链表
- 数据结构-静态链表
- 【数据结构】静态链表
- 数据结构:静态链表
- 数据结构:静态链表
- 数据结构--静态链表
- 数据结构-静态链表
- 数据结构实现静态链表
- 【数据结构】静态链表_StaticLinkList
- 数据结构之静态链表
- 数据结构之静态链表
- 数据结构之静态链表
- 数据结构之静态链表
- C静态链表 数据结构!
- 静态链表-数据结构(3)
- 数据结构二静态链表
- 数据结构之静态链表
- 搭建PHP环境
- 5.在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
- SQL从一张表的某个字段更新为另一张表的字段
- [LeetCode]Valid Palindrome
- 6.在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务
- 【数据结构】静态链表
- 构造函数不能声明为虚函数,析构函数可以声明为虚函数
- iOS 内存管理ARC与mrc
- sersync同步多个目录
- MyEclipse在Debug模式下报cannot connect to vm
- oracle 11g 导出到10g
- Objective-c Run Time
- LeetCode Generate Parentheses
- Android中的Selector的用法