模拟链表

来源:互联网 发布:秦美人盾牌进阶数据 编辑:程序博客网 时间:2024/06/15 09:11

如果指针不精通,也可以通过两个数组来模拟链表
通过两个数组实现链表:
数组1:data[],用来存储数据,就是链表结点的数据域。
数组2:right[],用来存储数据的下一个数据的位置,就是链表结点的指针域(next指针)。
模拟链表的建立:

#include<stdio.h>int main(int argc,char *argv[]){    int data[101],right[101];    int n,head=1,end=0,i;    scanf("%d",&n);    for(i=1;i<=n;++i)        scanf("%d",data+i);    for(i=1;i<=n;++i)    {        if(i!=n)            right[i]=i+1;        else            right[i]=end;    }    i=head;    while(i!=end)    {        printf("%-3d",data[i]);        i=right[i];    }    return 0;}

模拟链表的插入数据:

#include<stdio.h>#include<stdlib.h>#include<assert.h>int main(int argc,char *argv[]){    int data[101],right[101];    int n,i,begin=1,end=0,next;    scanf("%d",&n);    assert(n>0);    /*建立模拟链表*/    for(i=begin;i<=n;++i)        scanf("%d",&data[i]);    next=n;    for(i=begin;i<=n;++i)    {        if(i!=n)            right[i]=i+1;        else            right[i]=end;    }    next++;    /*在模拟链表中伪插入数据*/    scanf("%d",&data[next]);    int t=begin;    while(t!=end)    {        if(data[right[t]]>data[next])        {            right[next]=right[t];            right[t]=next;            break;        }        t=right[t];    }    /*输出模拟链表*/    t=begin;    while(t!=0)    {        printf("%-3d",data[t]);        t=right[t];    }    return 0;}
0 0
原创粉丝点击