静态链表的操作
数据结构中关于静态链表的思想和基本操作笔记文档
#include<stdio.h>
#include<stdlib.h>
/*关于静态链表所有操作笔记文档*/
/*记住一个关键思路:把space[i].cur当作space->next
记住:cur=0就代表着这是最后一个已使用的分量*/
/*以整型静态链表为例*/
#define MAXSIZE 1000
struct LinkNode{
int data;
int cur;
};
typedef struct LinkNode LinkList;
/*初始化静态链表*/
void InitList(LinkList space[]){
/*传入一个空数组,初始化一个空静态链表*/
int i;
for(i = 0;i < MAXSIZE - 1; i++){
space[i].cur = i + 1;
}
space[MAXSIZE - 1].cur = 0;
}
/*静态链表中,malloc分配空间和free释放空间需要自己定义*/
int Malloc_SSL(LinkList space[]){
/*传入静态链表,返回分配好的分量的下标*/
int i = space[0].cur;//找到第一个空闲分量
space[0].cur = space[i].cur;//让后一个空闲分量成为第一个空闲分量
return i;
}
void Free_SSL(LinkList space[], int k){
/*传入静态链表,释放指定下标的分量*/
space[k].cur = space[0].cur;
space[0].cur = k;
}
void ListInsert(LinkList space[], int i, int elem){
/*传入静态链表,待插入位置的下一个分量下标,待插入元素*/
int j, k, l;
k = MAXSIZE - 1;
j = Malloc_SSL(space);
if(j != 0){
space[j].data = elem;
for(l = 1;l <= i - 1; l++){
k = space[k].cur;
}
space[j].cur = space[k].cur;
space[k].cur = j;
}
}
void ListDelete(LinkList space[], int i){
/*传入静态链表,待删除位置的分量*/
int j, k, temp;
k = MAXSIZE - 1;
for(j = 1;j <= i - 1; j++){
k = space[k].cur;
}
temp = space[k].cur;
space[k].cur = space[temp].cur;
Free_SSL(space, temp);
}
int GetListElem(LinkList space[], int i){
/*传入静态指针,指定位置分量,返回该分量的data*/
int j, k;
k = MAXSIZE - 1;
for(j = 1;j <= i; j++){
k = space[k].cur;
}
return space[k].data;
}
void ChangeListElem(LinkList space[], int i, int newElem){
/*传入静态指针,指定位置分量, 修改该分量的data*/
int j, k;
k = MAXSIZE - 1;
for(j = 1;j <= i - 1; j++){
k = space[k].cur;
}
space[k].data = newElem;
}