用c语言创建双向环形链表
作为一个C开发人员,无论在求职笔试题中,还是在工程项目中,都会遇到用c语言创建双向环形链表。这个也是理解和使用c指针的一项基本功。
#include<...>//头文件省略
typedef struct ringbuf_str
{
unsigned int ringID; /* ring ID*/
struct ringbuf_str *next; /* Next ringbuf in list */
struct ringbuf_str *pre; /* Previous ringbuf in list */
} RINGBUF_T;
RINGBUF_T *Init_Ringbuf(int len)
{
RINGBUF_T *pCurrent=null;
RINGBUF_T *pHead=null;
RINGBUF_T *pPrevious=null;
int i=0;
//@1.创建链表头pHead
pCurrent = (RINGBUF_T *)calloc(sizeof(RINGBUF_T),1);
if(pCurrent == null)
{
return null;
}
pHead = pCurrent;
pPrevious = pCurrent;
//初始化表头内容
pHead->pre = pCurrent;
pHead->next = pCurrent;
pHead->ringID = 0;
//@2.创建链表体.
for(i=1;i<len;i++)
{
pCurrent = (RINGBUF_T *)calloc(sizeof(RINGBUF_T),1);
if(pCurrent == null)
{
return null;
}
pPrevious->next = pCurrent;
pCurrent->pre = pPrevious;
pCurrent->ringID = i;
pPrevious = pCurrent;
}
//@3.链表首尾相接,形成环形链表
pHead->pre = pCurrent;
pCurrent->next = pHead;
return(pHead);
}
//删除链表
int Release_Ringbuf(RINGBUF_T *ringbuff,int len)
{
RINGBUF_T *pCurrent = null;
RINGBUF_T *pPrevious = null;
int i = 0;
if(ringbuff == null)
return -1;
pCurrent = ringbuff;
for(i=0;i<len; i++)
{
pPrevious = pCurrent;
pCurrent = pCurrent->next;
free(pPrevious);
}
pCurrent = IC_NULL;
pPrevious = IC_NULL;
return 0;
}
//main函数
int main(void)
{
#define RINGBUFFLEN 10
RINGBUF_T *ringbuff=null;
//@1.初始化一个链表,长度为RINGBUFFLEN
ringbuff=Init_Ringbuf(RINGBUFFLEN);
//@2. do some operations
//...
//@3.释放该链表
Release_Ringbuf(ringbuff,RINGBUFFLEN);
return 0;
}
用c语言创建双向环形链表的更多相关文章
- Leecode刷题之旅-C语言/python-141环形链表
/* * @lc app=leetcode.cn id=141 lang=c * * [141] 环形链表 * * https://leetcode-cn.com/problems/linked-li ...
- 单链表的插入伪算法和用C语言创建单链表,并遍历
非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...
- C语言通用双向循环链表操作函数集
说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低. 可基于该函数集方便地构造栈或队列集. 本函数集暂未考虑并发保护. 一 ...
- php实现单,双向链表,环形链表解决约瑟夫问题
传智播客PHP学院 韩顺平 PHP程序员玩转算法第一季 http://php.itcast.cn 聊天篇: 数学对我们编程来说,重不重要? 看你站在什么样的层次来说. 如果你应用程序开发,对数学要求 ...
- 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)
链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...
- 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域
[源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...
- 丢手帕问题(环形链表)---Java 待优化
/** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param arg ...
- java 环形链表实现约瑟夫(Joseph)问题
约瑟夫问题又名丢手绢问题.相传著名犹太历史学家 Josephus 利用其规则躲过了一场自杀游戏,而后投降了罗马. 问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.* 从编号为 ...
- LeetCode 141:环形链表 Linked List Cycle
给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. Given a l ...
随机推荐
- exp/expdp 与 imp/impdp命令导入导出数据库详解
一.exp命令导出数据库 如何使exp的帮助以不同的字符集显示:set nls_lang=simplified chinese_china.zhs16gbk,通过设置环境变量,可以让exp的帮助以中文 ...
- 如何利用伪类元素和vertical-align: middle;实现元素相对于父元素居中
HTML部分 <div class="zhihu"> <div class="loginMain"> </div> < ...
- Python小白 哆唻a梦 用turtle绘图
点击观看视频 # -*- coding: utf-8 -*- """ Created on Sat Nov 10 22:02:32 2018 @author: 10029 ...
- 2018-计算机系机试-A
#include<stdio.h> #include<cstdio> #include<cmath> #include<cstring> #includ ...
- 我的第一篇博客:vue-cli配置项目
注意:在安装vue-cli之前一定要确保安装了node和vue 安装配置node:下载node(https://nodejs.org/en/)然后一路无脑安装 查看安装是否成功:node –versi ...
- Touch Gesture手势总结
- 设计模式的uml图的关键(核心)
每个设计模式的关键的部位就是,其变化点.用抽象来封装变化点 如下图的代理模式 关键点就是框图内的subject定义了 实际对象 和代理对象都具有的接口.才形成代理模式
- 《Spring实战》读书笔记——Spring简介
欢迎大家关注我的微信公众号,共同交流Java相关技术! 使用Spring的目的 Spring是为了解决企业级应用开发的复杂性而创建的,使用Spring可以让简单的JavaBean实现之前只有EJB才能 ...
- DPDK - gsg文档(介绍与编译)
&& Hugepage 提前分配hugepage内存,可以减少虚拟页地址转换到物理地址所需的时间. 相关命令: 在虚拟机上运行时,在没有NUMA的机器上,执行“echo 1024 &g ...
- java高级进阶