用数组模拟链表

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-21 11:28   127   0

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");
 }
}

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP