当前位置: 首页 > news >正文

顺序结构双链表的实现

双链表是用最快的时间实现链表的一种方式,具体的实现代码如下:

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int LTDataType;
typedef struct ListNode
{LTDataType data;struct ListNode* next;//下一个节点struct ListNode* prev;//上一个节点
}LTNode;//初始化
LTNode* LTInit();
//销毁
void LTDestroy(LTNode* phead);
//打印
void LTPrint(LTNode* phead);
//bool LTEmpty(LTNode* phead);
//尾插
void LTPushBack(LTNode* phead, LTDataType x);
//尾删
void LTPopBack(LTNode* phead);
//头插
void LTPushFront(LTNode* phead, LTDataType x);
//头删
void LTPopFront(LTNode* phead);
#include"dlist.h"
//创建新节点
LTNode* CreateLTNode(LTDataType x)
{LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->data = x;newnode->next = NULL;newnode->prev = NULL;return newnode;
}
//初始化
LTNode* LTInit()
{LTNode* phead = CreateLTNode(-1);phead->next = phead;phead->prev = phead;return phead;
}
//销毁
void LTDestroy(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){LTNode* next = cur->next;free(cur);cur = next;}free(phead);phead = NULL;
}
//打印
void LTPrint(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;while (cur != phead){printf("%d<=>", cur->data);cur = cur->next;}printf("NULL\n");
}
//尾插
void LTPushBack(LTNode* phead, LTDataType x)
{LTNode* newnode = CreateLTNode(x);LTNode* tail = phead->prev;newnode->prev = tail;newnode->next = phead;tail->next = newnode;phead->prev = newnode;
}
//尾删
void LTPopBack(LTNode* phead)
{assert(phead);LTNode* tail = phead->prev;tail->prev->next = phead;phead->prev = tail->prev;free(tail);tail = NULL;
}
//头插
void LTPushFront(LTNode* phead, LTDataType x)
{assert(phead);LTNode* newnode = CreateLTNode(x);LTNode* next = phead->next;phead->next = newnode;newnode->prev = phead;newnode->next = next;next->prev = newnode;
}
//头删
void LTPopFront(LTNode* phead)
{assert(phead);LTNode* cur = phead->next;phead->next = cur->next;cur->next->prev = phead;free(cur);cur = NULL;
}

在初始化的过程中,因为要改变phead的值,所以要传入二级指针 ,但是为了保证统一,只需要初始化的时候返回一个节点指针就可以避免传入二级指针

相关文章:

  • Docker 容器双网卡访问物理雷达网络教程
  • 阿里云 CentOS YUM 源配置指南
  • 自动化立库/AGV物流仿真详细步骤
  • CentosLinux系统crontab发现执行删除命令失效解决方法
  • Kubernetes in action-Kubernetes的pod
  • 修改输入框选择框颜色
  • 第八章 磁盘管理未完待续
  • 数据库中常用的窗口函数
  • neo4j基础操作:命令行增删改查
  • 从SOA到微服务:架构演进之路与实践示例
  • 外部存储器接口:EMIF总线
  • 中国人工智能发展战略与个体发展机遇研究
  • 分词概念,中英文不同语言分词原理,以及中文分词的所有方法(基于词典匹配的分词方法、 基于语义理解的分词方法、 基于词频统计的分词方法)
  • CentOS上搭建 Python 运行环境并使用第三方库
  • Qt5与现代OpenGL学习(三)纹理
  • Android 实现一个隐私弹窗
  • c网络库libevent的http常用函数的使用(附带源码)
  • 打造惊艳的渐变色下划线动画:CSS实现详解
  • Kotlin -> lateinit 和 lazy 详解
  • 聚焦智能体未来,领驭科技在微软创想未来峰会大放异彩
  • 魔都眼|静安光影派对五一启幕:苏河湾看徐悲鸿艺术画作
  • 建行一季度净利833.51亿同比下降3.99%,营收降5.4%
  • 王毅:为改革完善全球治理作出金砖贡献
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 澎湃回声|山东莱州、潍坊对“三无”拖拉机产销市场展开调查排查
  • 看展览|建造上海:1949年以来的建筑、城市与文化