用数组模拟链表

来源:互联网 发布:山东数据恢复 编辑:程序博客网 时间:2024/05/17 20:24

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 4void 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 0