用数组模拟链表

1.什么是数组模拟链表:

        数组模拟链表是一个什么呢?就是在某索引处存储下一个索引。下面举例说明:

       

 

        不知道大家明白了没有。如果我上面的数组定义为a[4],那么我访问a[0]时,所获取的就是下一个位置所对应的索引。也就是我要向访问a[0]的下一个节点,那么我只需要访问a[a[0]],这样,就获取了下一个节点处的值。

2.链表的操作:

       2.1

       把03fristlast进行存储的话,这样的话,在对数组进行操作以后,增加操作我个人感觉也就可以执行了。此时first=0last=3

       

       i. 需要new一个比原数组大1的数组,然后进行数组clone

       ii. 需要修改索引为last的值为数组.length-1(此时为4

       iii. 把新增加的索引处的值改为first(此时为0)

       iv. 修改last的值为数组.length-1

       

                     

       2.2 

       举例:删除索引为1的值所对应的元素(其实不是删除,这个我感觉很不好)。

       i. 获取索引1处的值:2

       ii. 获取索引2处的值:3

       iii. 讲1处的值改为2处的值

       iv. 如果删除的为last处的值,需要将last改为值为last处的索引,例如删除4,那么last需要改为值为4处的索引:3.

       v. 如果删除的为first处的值,那么将first改为索引first处的值,例如删除0,那么first需要改为索引0处的值:1

              

       这样,就没有了指向2处的元素,这个元素也就被“删”掉了。

       2.3 其他操作

       其他操作需要很强的依赖数组操作,有兴趣可以自己研究一下,由于这次我做的例子用到的不多,我也就不再一一列举了。

3 C语言结构体数组实现链表

#include<stdio.h>
#include<stdlib.h>
#define K 4
void main(){

	struct array{
		int data;
		int index;
	};
	struct array arr[10]={{'a',1},{'b',2},{'c',3},{'d',4},{'e',5},{'f',6},{'g',7},{'h',8},{0,0},{0,0}};
	int pos=0;
	//K=5;
	arr[sizeof(arr)-1].data='k';
	arr[K].index=sizeof(arr)-1;
	arr[sizeof(arr)-1].index=K+1;
	while(arr[pos].data != 0){
		printf("%c",arr[pos].data);
		pos=arr[pos].index;
		printf("\n");
	}
}

简单实现便于理解数组的操作过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值