作为一个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 ...
随机推荐
-
【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
RAC 特殊问题和实战经验(五) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
-
【python】类(资料+疑惑)
1.http://python-china.org/t/77 有关method binding的理解 2.[Python] dir() 与 __dict__,__slots__ 的区别 3.Descr ...
-
Bootstrap<;基础二十>; 标签
Bootstrap 标签.标签可用于计数.提示或页面上其他的标记显示.使用 class .label 来显示标签,如下面的实例所示: <!DOCTYPE html> <html> ...
-
ubuntu14.04 安装系统
p { margin-bottom: 0.1in; line-height: 120% } code.cjk { font-family: "Droid Sans Fallback" ...
-
struts2 基础demo1
我们都知道 struts2 是基于webframework 出现的 优秀的mvc 框架, 他和struts1 完全没有联系.struts2 是一个框架, 啥叫框架呢?是一个优秀的半成品 . web的框 ...
-
CSS3之渐变效果
在css3出来之前,想要出现渐变效果必须就要制作一张图片.不过css3的出现使得渐变效果变得简单.由于不是所有的浏览器都支持css3,所以不是所有的浏览器都能够呈现出css3的效果出来.因此目前大部分 ...
-
ORA-07217: sltln: environment variable cannot be evaluated及RMAN-06059
备份脚本: RMAN> run { allocate channel c1 device type disk format '$BACKUP_HOME/level0/level0_%d_%s_% ...
-
keilc 4 编译出现的几个错误…
原文地址:keilc 4 编译出现的几个错误解决作者:黑子 今天安装了keilc4,因为项目用到,所以把遇到的几个编译错误解决方法说说,第一次写东西不知道写啥!! 一 第一个是错误提示 ...
-
Go VS Code 调式常见问题处理
GO VS Code 调式配置 launch.json{ "version": "0.2.0", "configurations": [ { ...
-
mac sublime3 无法安装Package Control
一.在线安装 1.打开sublime,Ctrl+` 打开控制台, 输入 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df5dedc ...