静态链表

看了一条题目静态链表
所心去了一下静态链表。这个我以前没学过。
设有MAXSIZEz个结点
第一个结点用来存储第一个备用结点的下标。
最后一个结点用来存储这个链表第一个元素的下标,相当于头指针
下面代码中的注释是我对静态链表的理解

#include <stdio.h>
#define MAXSIZE 10
typedef int DataType;
typedef struct node{
	DataType data;       //一个结点中的数据域 
	int cur;             //一个结点中的指针域 
}Node;
Node space[MAXSIZE];     //相当于有MAXSIZE个结点,只不这里的结点已经有确定好个数了

void init()              //对每个结点进行初始化 
{ 						/*第一个结点和最后一个结点不使用,第一个结点用来存储第一个备用结点的下标*/                  
	for(int i = 0;i < MAXSIZE-1;i++){ //所以才开始的时候为1 
		space[i].cur = i+1;
	}
	space[MAXSIZE-1].cur = 0; //最后一个结点用来存储的是  有数据的第一个元素的下标,相当于头指针,才开始默认为0 
}

void insert(int n,DataType x)
{
	int j = 1;
	int k = MAXSIZE-1; 
	
	while(j <= n-1){  //找到要插入的位置, 
		k = space[k].cur;
		j++; 
	}
	int t = space[0].cur;        //  找到第一个备用结点的下标
	space[0].cur = space[t].cur; //  将第一个备用结点的下标进行改变 
	space[t].data = x;
	space[t].cur = space[k].cur;
	space[k].cur = t;
}
void travers()
{
	int i = space[MAXSIZE-1].cur;
	while(i){  //i为0表示已经遍历结束了 
		printf("%d\n",space[i].data);
		i = space[i].cur;
	}
}
void del(int n)  //删除第n个元素 
{
	int i = 1;
	int k = MAXSIZE-1;
	while(i <= n-1){  //找到要删除的位置 
		i++;
		k = space[k].cur;
	}
	int p = space[k].cur;
	space[k].cur = space[p].cur; //将这个元素进行删除
	
	/*因为这个元素已经被删除了,所以这个元素要成为备用结点*/ 
	space[p].cur = space[0].cur;
	space[0].cur = p;
}
int main()
{
	init();   //初始化 
	for(int i = 0;i < 5;i++){
		int n;
		DataType x;
		scanf("%d %d",&n,&x);
		insert(n,x);//在第n个位置插入x 
		travers(); //遍历 
	}
	for(int i = 0;i < 3;i++){
		int n;
		scanf("%d",&n);//删除第n个元素
		del(n); 
		travers(); //遍历 
	}
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值