作为一个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语言创建双向环形链表的更多相关文章

  1. Leecode刷题之旅-C语言/python-141环形链表

    /* * @lc app=leetcode.cn id=141 lang=c * * [141] 环形链表 * * https://leetcode-cn.com/problems/linked-li ...

  2. 单链表的插入伪算法和用C语言创建单链表,并遍历

    非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...

  3. C语言通用双向循环链表操作函数集

    说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低.     可基于该函数集方便地构造栈或队列集.     本函数集暂未考虑并发保护. 一  ...

  4. php实现单,双向链表,环形链表解决约瑟夫问题

    传智播客PHP学院 韩顺平 PHP程序员玩转算法第一季  http://php.itcast.cn 聊天篇: 数学对我们编程来说,重不重要? 看你站在什么样的层次来说. 如果你应用程序开发,对数学要求 ...

  5. 数据结构与算法——链表 Linked List(单链表、双向链表、单向环形链表-Josephu 问题)

    链表是有序的列表,但是在内存中存储图下图所示 链表是以 节点 的方式来存储,是 链式存储 每个节点包含 data 域.next 域,指向下一个节点 链表的各个节点 不一定是连续存储,如上图所示 链表还 ...

  6. 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域

    [源码下载] 不可或缺 Windows Native (9) - C 语言: 动态分配内存,链表,位域 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 动态分配内存 链 ...

  7. 丢手帕问题(环形链表)---Java 待优化

    /** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param arg ...

  8. java 环形链表实现约瑟夫(Joseph)问题

    约瑟夫问题又名丢手绢问题.相传著名犹太历史学家 Josephus 利用其规则躲过了一场自杀游戏,而后投降了罗马. 问题: 已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围.* 从编号为 ...

  9. LeetCode 141:环形链表 Linked List Cycle

    给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. Given a l ...

随机推荐

  1. JAVA EE------XML

    1.XML定义:在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等.它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语 ...

  2. mysql 实现 sqlserver的row_number over() 方法

    1.创建表 CREATE TABLE `heyf_t10` ( `empid` int(11) DEFAULT NULL, `deptid` int(11) DEFAULT NULL, `salary ...

  3. CSS3 正方体

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. 禁用ViewPager的滑动事件

    public class NoScrollViewPager extends ViewPager { private boolean noScroll = false; public NoScroll ...

  5. Filter 中空指针错误

    Filter 是过滤器,凡是通过servlet  JSP 的请求需要filter 进行过滤或者拦截操作,保证数据的合法或者逻辑正确性 但是写第一个filter 配置完成后,发现jsp 文件进不去了,直 ...

  6. WEB学习笔记14-HTML5新特性的使用

    (1)定义文档类型声明 <!DOCTYPE html> (2)定义页面编码 <!—HTML 4.01中定义的设置页面编码的方式--> <meta http-equiv=& ...

  7. Python爬虫--简单的单词查询

    Refer to: https://github.com/gaopu/Python/blob/master/Dict.py 本程序参考自上面Github连接 该程序功能是输入一个单词可以给出这个单词的 ...

  8. thinkphp5.0验证的封装

    刚学完这个验证器封装,刚开始还是有点晕的,后面仔细看了两遍,才慢慢感觉到了继承这个方法的好处,看来还得慢慢锻炼锻炼; 问题:结合上篇的自定义验证器,发现每次使用验证器都重复这样写代码;//验证器$va ...

  9. Sqlite 参数化 模糊查询 解决方案

    转自:https://codedefault.com/2018/does-dapper-support-the-like-operator-in-csharp-application 问题描述 如题, ...

  10. oc语言的Foundation框架(学习笔记2)

    紧接上文…… 4.集合对象 4.1数组 1.基本概念 Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合,通过索引下标获取到数组中的各个元素,也分可变和不 ...