首页 > 其他分享 >3、静态链表

3、静态链表

时间:2024-09-13 13:35:35浏览次数:8  
标签:sList 下标 静态 StaticList pos next 链表 int

1、静态链表初始化

head指向-1代表当前为空链表,pool指向下一个可用空间(在数组下标为2的空间),2指向3,3指向4,最后的指向0表示没有下一个节点,以此链接起来。

2、实现代码

#include<stdio.h>
#include<malloc.h>

#define MAX_SIZE 20

typedef char ElemType;

typedef struct StaticList{
    ElemType data;
    int      next;    
}StaticList;


void initSList(StaticList* sList){
    int i = 0;
    //将数组链接起来 
    for(i;i < MAX_SIZE - 1;i++){
        sList[i].next = i + 1;
    }
    //数组下标为0的元素代表头结点
    //头结点指向-1代表后面没有元素,即为空链表 
    sList[0].next = -1;
    //指向 0 表示后续没有其他可用空间 
    sList[MAX_SIZE - 1].next = 0;
    
}

//获取数组下一个可用位置下标 
int malloc_node(StaticList* sList){
    //拿到数组中可用空间的下标 
    int pos = sList[1].next;
    
    if(sList[pos].next != 0){
        //说明当前数组还有未使用空间 
        //指向下一个未使用空间的下标 
        sList[1].next = sList[pos].next;
    }
    return pos;
}

//头插法 
void insert_head(StaticList* sList,ElemType e){ 
    //获取数组可用空间的元素下标 
    int i = malloc_node(sList);
    if(i == 0){
        printf("空间不足,申请节点空间失败.\n");
        return;
    }
    sList[i].data = e;
    if(sList[0].next == -1){
        //说明当前插入的是第一个元素 
        sList[i].next = -1;
    }else{
        //说明不是第一个元素,采用头插法插入 
        sList[i].next = sList[0].next;
    }
    //头节点指向插入的节点下标 
    sList[0].next = i;
    
}

//释放节点
void free_node(StaticList* sList,int pos){
    //重新链接数组 
    sList[pos].next = sList[1].next;
    //下标为 pos 的节点成为下一个可用空间 
    sList[1].next = pos;
} 

//删除头部
void delete_head(StaticList* sList){
    //获取第一个节点下标 
    int i = sList[0].next;
    if(i == -1){
        printf("当前链表为空,不可删除.\n");
        return;
    }
    //将第一个元素指向下一个元素下标给到头节点 
    sList[0].next = sList[i].next;
    //重新链接数组 
//    sList[i].next = sList[1].next;
    //删除的节点成为下一个可用空间 
//    sList[1].next = i; 
    free_node(sList,i);
} 

//打印链表 
void show_SList(StaticList* sList){
    int i = sList[0].next;
    while(i != -1){
        printf("%c->",sList[i].data);
        i = sList[i].next;
    }
    printf("NULL .\n");
}
int main(){
    StaticList staticList[MAX_SIZE];
    initSList(staticList);
    int i = 0;
    for(i;i <= 5;i++){
        insert_head(staticList,'a'+i);
    }
    show_SList(staticList);
    delete_head(staticList);
    show_SList(staticList);
    return 0;
}

 

 

标签:sList,下标,静态,StaticList,pos,next,链表,int
From: https://www.cnblogs.com/xpp3/p/18412041

相关文章

  • 链表
    1、创建链表-无头结点#include<stdio.h>#include<malloc.h>#include<assert.h>typedefintElemType;//定义链表typedefstructListNode{ElemTypedata;structListNode*next;}ListNode;typedefListNode*PList;//初始化链表,让链表一开始指向为空v......
  • 华为OD机试真题-寻找链表的中间节点-2024年OD统一考试(E卷)
    最新华为OD机试考点合集:华为OD机试2024年真题题库(E卷+D卷+C卷)_华为od机试题库-CSDN博客   题目描述给定一个单链表QL,请编写程序输出L中间结点保存的数据,如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7,给定L为1→2→3→4,则输......
  • C语言----使用链表实现的客户管理系统
    实现一个客户信息管理系统,功能包括添加客户、修改客户、删除客户、显示客户列表。学完了C语言和链表没事情干拿出来写一写,检测下学习成果#include<stdio.h>#include<stdlib.h>#include<string.h>typedefstructNode{intnum;charname[20];chargender;......
  • 链表的实现
     链表是数据结构中一种基础且重要的数据结构,它允许我们有效地在序列中插入和删除元素,而无需重新分配整个数据结构。与数组相比,链表提供了更高的灵活性,但也可能在访问速度上有所牺牲。现在我将将从基础概念出发,逐步深入链表并详细探讨链表的基本操作及其与数组的性能差异和适......
  • 21.两两交换链表中的节点
    classSolution{publicListNodeswapPairs(ListNodehead){ListNodea=head,b=head;while(a!=null&&a.next!=null){b=a.next;//两两交换inttemp;temp=a.val;a.val=b.val;......
  • PbootCMS网站IIS伪静态规则
    web.config<?xmlversion="1.0"encoding="UTF-8"?><configuration><system.webServer><rewrite><rules><rulename="reIndex"stopProcessing="true&q......
  • 用父类的对象引用子类对象中重写的方法 静态方法重写
    用父类的对象引用子类对象中重写的或继承的方法比如,以下程序中,Shape是抽象类,Circle和Rectangle是子类,均重写了抽象方法//定义抽象类publicabstractclassShape{//定义2个抽象方法publicabstractdoubleGetArea();publicabstractdoubleGetCircum();//定义普通方法p......
  • 静态pv、动态pv
    目录概念pv的状态pvc在请求的过程中支持的权限控制选项pv的回收策略Retain保留Delete删除Recycle回收在yaml文件中指定pv的回收策略静态pv1.配置NFS2.创建pv3.创建pvc动态pv动态pv的步骤1.配置NFS2.创建角色、赋权、绑定角色3.创建NFS provisioner4.......
  • debian 修改静态ip地址保存生效
    [问题]应用原因,停用NetworkManager修改/etc/network/interfaces接口配置无效ifconfigaddip 仅能临时有效,重启丢失[解决]编辑配置vim/etc/netplan/01-network-manager-all.yamlnetwork:version:2ethernets:......
  • pbootcms伪静态设置教程含apache、naginx、IIS不同环境配置规则
    其实pbootcms伪静态已经整理好,在根目录就可以找到作为使用者,只需要根据不同的服务器环境,使用不同格式的数据就行。 naginx#请复制下面伪静态配置到nginx配置文件中:#规则适合PbootCMSV2.0+版本location/{ if(!-e$request_filename){ rewrite^/(.*)$/index.php......