动态数据结构——静态链表(C语言)

什么是静态数据结构?

我们在程序里大多使用的是静态数据结构,比如说整型、浮点型、数组,它们的特点是由系统分配,固定大小的存储空间。在之后程序运行时,它的空间位置以及容量都不会再改变。

但当我们不确定一个东西的存储空间时应该如何处理?

这时我们就需要用到动态数据结构

链表:

首先链表需要有一个头指针变量(即head),head存放了一个地址,这个地址指向了链表里的第一个元素(A)。

链表里的每个元素都是一个节点,每个节点包含了两部分(当前节点存储的数据以及下一个节点的地址)。

由上图我们可以看出T节点为最后一个节点,所以它的地址存储为空(null)。

注意到链表里的各个元素的地址不一定是连续的,这与数组的存储地址方式有所区别。

如果我们想访问B元素里的数据,就必须通过其上一个节点(A)提供的B的地址,才能访问到B。并且如果没有头指针,整个链表同理也是无法访问的。

下面我们来写一个静态链表:

1.首先写一个结构体类型来作为节点元素:

struct weapon{
    int atk;
    int price;
    struct weapon * next;
};

这里边有三个成员,攻击力(atk)、价格(price)以及struct weapon类型的指针变量(next),该指针变量用来存放下一个节点的地址。

2.现在定义三个weapon的结构体变量作为节点以及头指针head:

struct weapon a,b,c,*head;

3.接下来对三个weapon结构体成员进行赋值操作:

    a.atk = 100;
    a.price = 100;
    b.atk = 200;
    b.price = 200;
    c.atk = 300;
    c.price = 300;

4.将三个节点连成一个链表:

    head = &a;
    a.next = &b;
    b.next = &c;
    c.next = NULL;

5.打印链表里各个元素的值:

    struct weapon *p;
    p = head;
    while(p != NULL){
        printf("%d %d ",p->atk,p->price);
        p = p->next;
    }

其中“struct weapon *p”表示借助指针p去访问节点。

6.完整代码如下:

#include<stdio.h>
struct weapon{
    int atk;
    int price;
    struct weapon * next;
};

int main()
{
    struct weapon a,b,c,*head;
    a.atk = 100;
    a.price = 100;
    b.atk = 200;
    b.price = 200;
    c.atk = 300;
    c.price = 300;
    head = &a;
    a.next = &b;
    b.next = &c;
    c.next = NULL;

    struct weapon *p;
    p = head;
    while(p != NULL){
        printf("%d %d ",p->atk,p->price);
        p = p->next;
    }
    return 0;
}

7.运行结果:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值