其实静态链表不太好理解的是备用链表。
记住:
1、第一个元素不放数据,存放下一次要新加的元素在数组中的位置。
2、最后一个元素不放数据,存放第一个元素的索引。
这样,相当于静态链表中实际上有两个链表。
初始化的时候,一定要将数组的所有元素链接起来(当然第一个和最后元素除外),也就是初始化备用链表。
/*
* StaticLinkList.h
*
* Created on: 2013年7月16日
* Author: Administrator
*/
#ifndef STATICLINKLIST_H_
#define STATICLINKLIST_H_
#define ELEM_TYPE int
#define MAX_SIZE 1000
typedef struct {
ELEM_TYPE data;
int cur;
}StaticLinkList;
extern StaticLinkList ssl[];
void initStaticLinkList (StaticLinkList *);
int malloc_ssl (StaticLinkList *);
void free_ssl (StaticLinkList *, int);
void insert (StaticLinkList *, ELEM_TYPE);
void delete (StaticLinkList *, int);
int locate (StaticLinkList *, int , ELEM_TYPE *);
#endif /* STATICLINKLIST_H_ */
/*
* StaticLinkList.c
*
* Created on: 2013年7月16日
* Author: Administrator
*/
#include <stddef.h>
#include "StaticLinkList.h"
StaticLinkList ssl[MAX_SIZE];
void initStaticLinkList(StaticLinkList *pSSL) {
int i = 0;
if(pSSL == 0) {
return;
}
for(i = 0; i < MAX_SIZE - 1; ++i) {
pSSL[i].cur = i + 1;
}
pSSL[MAX_SIZE - 1].cur = 0;
}
int malloc_ssl(StaticLinkList * pSSL) {
int k = pSSL[0].cur;
if(k) {
pSSL[0].cur = pSSL[k].cur;
}
else {
return -1;
}
return k;
}
void free_ssl(StaticLinkList * pSSL, int cur) {
pSSL[cur].cur = pSSL[0].cur;
pSSL[0].cur = cur;
}
void insert(StaticLinkList *pSSL, ELEM_TYPE data) {
int newCur = malloc_ssl(pSSL);
if(!newCur) {
return;
}
pSSL[newCur].data = data;
pSSL[newCur].cur = pSSL[MAX_SIZE - 1].cur;
pSSL[MAX_SIZE - 1].cur = newCur;
}
void delete(StaticLinkList *pSSL, int index) {
int j = 0;
int i = pSSL[MAX_SIZE - 1].cur;
int previous = MAX_SIZE - 1;
while(i && j < index) {
previous = i;
i = pSSL[i].cur;
++j;
}
if(i && j == index) {
pSSL[previous].cur = pSSL[i].cur;
free_ssl(pSSL, i);
}
}
int locate(StaticLinkList *pSSL, int index, ELEM_TYPE *pData) {
int i = pSSL[MAX_SIZE - 1].cur;
int j = 0;
while(i && j < index) {
i = pSSL[i].cur;
++j;
}
if(i && j == index) {
*pData = pSSL[i].data;
return 1;
}
return 0;
}
/*
* main.c
*
* Created on: 2013年7月16日
* Author: Administrator
*/
#include <stdio.h>
#include "StaticLinkList.h"
void print(StaticLinkList * pSSL) {
int cur = pSSL[MAX_SIZE - 1].cur;
while(cur) {
printf("%3d", pSSL[cur].data);
cur = pSSL[cur].cur;
}
printf("\n");
}
int main(int argc, char **argv) {
int i = 0;
ELEM_TYPE data;
initStaticLinkList(ssl);
for(i = 0; i < 10; ++i) {
insert(ssl, i);
}
print(ssl);
delete(ssl, 0);
delete(ssl, 1);
delete(ssl, 4);
print(ssl);
if(locate(ssl, 0, &data)) {
printf("%d ", data);
}
return 0;
}
分享到:
相关推荐
c语言实现的静态链表
对于线性链表,也可用一维数组来进行描述。这种描述方法便于在没有指针类型的高级程序设计...用数组描述的链表,即称为静态链表。在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标CUR。
本程序适合初学者学习和模仿的一个静态链表的删除的生成过程。。。。
用C实现的静态链表
关于严蔚敏版数据结构的静态链表的代码实现,C语言实现
静态链表的使用 数据结构 C 静态链表 结构体数组
数据结构-基本算法-静态链表(学生时代源码,调试可运行)
数据结构 静态链表的实现 数据结构 静态链表的实现 数据结构 静态链表的实现 数据结构 静态链表的实现 数据结构 静态链表的实现 数据结构 静态链表的实现
通过静态链表的实现,掌握静态链表的基本操作所用的思想方法。
有关c语言静态链表的创建 有兴趣可以看看啊
静态链表的基本操作,用codeblocks运行通过,包含初始化,插入,删除等。
静态链表实现文件的存储,一些基本功能的实现。C语言基础,课程设计。
数据结构笔记之线性表(-):静态链表表示与实现
本为主要介绍集合的基本运算、并且以静态链表的形式给出具体算法。
数据结构C语言版 静态链表实现集合运算 P33-34 编译环境:visualC++ 日期:2011年12月11日
我的数据结构作业,静态链表。望大家指点一二
图和代码相结合,详细讲解静态链表。通过生动活泼的对话让读者理解内村动态申请。
实现了静态链表的基本操作和存储实现,包括,初始化,插入,删除,输入函数,等。 初始化的时候链表被初始化为相邻元素即为链表的前后节点的形式,适合于初学者研究,自己编写,vc6.0编译运行均通过,如果错误请联系...
数据结构中的静态链表的操作: 1.增 2.删 3.改 4.查 欢迎指正
模拟实现内存分配——采用静态链表 数据结构课程设计 模拟实现内存分配——采用静态链表 数据结构课程设计 用静态链表是一种便于在不设“指针”的类型的高级程序设计语言中使用的链表类型。使用静态链表模拟内存...