静态链表的实现

对于一般的动态链表来说,要动态分配,还要借助指针

对于静态链表来说,不用借助指针,建立两个数组,一个数组存储数据,一个数组存储各个元素之间的位置关系

从某方面来说,静态链表是顺序表和链表的结合体,即具有二者的有点,如,插入和删除时不需要移动元素,便于查找(某种情况下),但同时也具备了二者的缺点,首先就是失去了动态性,浪费空间,修改次数多了以后查找也不再方便

​​​​#include <stdio.h>
#include <stdlib.h>

#define MAX 100//最大容量

typedef struct com
{
    int data;//数据域,用来存储数据
    int cur;//指针域,因为指针域就是二者的位置关系,所以可以通过数字存储
    int size;//记录当前的长度便于操作
}com,sta[MAX];//定义一个结构体数组变量

void InitList(sta l)//初始化,没有你想不到的,结构体变量数组也可作为函数参数
{
    int i;
    for(i=0;i<MAX-1;i++)
    {
        l[i].cur=i+1;//对数组的位置进行赋值,确定他们之间的位置关系
        l[MAX-1].cur=0;//目前静态链表为空,最后一个的cur为0
    }
}

void CreateList(sta l)//静态链表数据的输入
{
    int i,j,x;

    printf("请输入要创建的元素个数\n");
    scanf("%d",&j);
    l[MAX-1].cur=j;
    for(i=0;i<j;i++)
    {
        scanf("%d",&x);
        l[i].data=x;
    }

}

void PrintList(sta l)//静态链表的打印输出
{
    int i,j;
    i=0;
    j=0;
    for(i=0;i<l[MAX-1].cur;i++)
    {
        printf("%d\n",l[j].data);
        j=l[j].cur;


    }

}

void InsertListTail(sta l)//在静态表的尾部插入数据
{
    int i,j,x;
    j=l[MAX-1].cur;
    printf("请输入要插入的数据\n");
    scanf("%d",&x);
    l[j].data=x;
    l[MAX-1].cur++;
}

void InsertList(sta l)//静态链表的插入,贼溜
{
    int i,j,x,k;
    k=l[MAX-1].cur;
   // printf("%d\n",k);

    printf("请输入要插入的位置和元素\n");
    scanf("%d %d",&j,&x);
    l[k].data=x;
    l[j-1].cur=k;
    l[k].cur=j;

    l[MAX-1].cur++;
}

void DeleteList(sta l)//静态链表的删除
{
    int i,j,x;
    printf("请输入要删除的位置\n");
    scanf("%d",&j);
    l[j-1].cur=l[j].cur;
    l[MAX-1].cur--;
}

int main()
{
    sta a;
    InitList(a);
    CreateList(a);
    InsertList(a);
    InsertListTail(a);
    DeleteList(a);
    PrintList(a);
    return 0;
}

简单来说就是通过下标访问链表,通过下标删除和插入链表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值