0
点赞
收藏
分享

微信扫一扫

静态链表的基本操作

倪雅各 2022-06-17 阅读 106
//静态链表(用数组实现链表)
#include <stdio.h>

#define OK 1
#define ERROR 0
#define FALSE 0
#define TRUE 1

#define MAXN 1000 //假设链表的长度是1000

typedef struct elem {
int n; //数据元素(可自己指定)
int nest; //相当于指针
}elem;

elem splist[MAXN];//数组的每个元素由两个数据域组成,一个放数据元素,一个放后继在数组中的下标
//把未使用的数组元素成为备用数组
//数组中第一个元素和最后一个元素做特殊处理
//第一个nest放第一个备用数组的下标,最后一个nest放第一个存放元素的位置,相当于头指针
//最后一个结点的nest为0

//初始化链表
int InitList(elem* L) {
if (L == NULL) return ERROR;
L->nest = 1;//第一个备用链表的下标为1
L->n = 0;
for (int i = 1; i <= 999; i++) {
(L + i)->n = 0;
(L + i)->nest = 0;
}
return OK;
}

//添加元素
int CreateList(elem* L) {
if (L == NULL) return ERROR;
printf("请输入元素个数:");
int n = 0, m, i = 1;
scanf("%d", &n);
L->nest = n + 1;
(L + MAXN - 1)->nest = 1;
while (i<=n) {
scanf("%d", &m);
(L + i)->n = m;
(L + i)->nest = i + 1;
i++;
}
(L + n)->nest = 0;
return OK;
}

//添加一个元素
int AddList(elem* L, int i, int n) { //i表示位置,n表示数据
if (i <= 0 || L==NULL) return ERROR;
int j = 0, p = MAXN - 1, q = (L + MAXN - 1)->nest;
while (j < i - 1 && (L+p)->nest != 0) {
j++;
p = (L + p)->nest;
}//找到第i-1个结点
if (j < i - 1) return ERROR;

int des = L->nest;
(L + des)->n = n;
(L + des)->nest = (L + p)->nest;
(L + p)->nest = des;
if (i == 1) (L + MAXN - 1)->nest = i;//将新节点加入链表中

while ((L + q)->nest != 0) {
q = (L + q)->nest;
}//找到最后一个结点

//下面找最前面的备用链表的下标
int sor = 1;
while ((L + sor)->nest) {
if ((sor + 1) == q) sor += 2;
else sor++;
}
L->nest = sor;
return OK;

}

//删除一个元素
int DeleteList(elem* L, int i) {
if (i <= 0 || L == NULL) return ERROR;
int j = 0, p = MAXN - 1;
while (j < i - 1 && (L+(L + p)->nest)->nest != 0) {
j++;
p = (L + p)->nest;
}
if (j < i - 1) return ERROR;
int q = (L + p)->nest;
(L + p)->nest = (L + (L + p)->nest)->nest;
(L + q)->nest = 0;
return OK;
}

//求链表的长度
int LengthList(elem* L) {
if (L == NULL) return ERROR;
int i = 0, p = MAXN - 1;
while ((p = (L + p)->nest) != 0) {
i++;
}
return i;
}

//判断链表是否为空
int EmptyList(elem* L) {
if (L == NULL) return -1;
if ((L + MAXN - 1)->nest == 0) return TRUE;
else return FALSE;
}

//找到第i个元素并存到e中
int SearchList(elem* L, int i, int* e){
if (L == NULL) return ERROR;
int j = 0, p = MAXN - 1;
while (j < i && (L + p)->nest != 0) {
j++;
p = (p + L)->nest;
}
if (j < i - 1) return ERROR;
*e = (L + p)->n;
return OK;
}

//清空链表
int ClearList(elem* L) {
if (L == NULL) return ERROR;
int p =(L + MAXN - 1)->nest, q = MAXN - 1;
while (q != 0) {
q = (L + p)->nest;
(L + p)->nest = 0;
p = q;
}
L->nest = 0;
(L + MAXN - 1)->nest = 0;
return OK;
}

int main()
{
return 0;
}
举报

相关推荐

0 条评论