04 循环链表

循环链表

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4
  5 // 数据结构
  6 typedef struct node
  7 {
  8     int data;
  9     struct node *next;
 10 }loopList;
 11
 12 loopList *loopList_init(void)
 13 {
 14     loopList *list = (loopList *)malloc(sizeof(loopList));
 15
 16     if (list == NULL)
 17     {
 18         return NULL;
 19     }
 20
 21     list->next = list;
 22
 23     return list;
 24 }
 25
 26 int loopList_add_head(loopList *list, int data)
 27 {
 28     if (list == NULL)
 29     {
 30         return -1;
 31     }
 32
 33     loopList *node = (loopList *)malloc(sizeof(loopList));
 34     if (node == NULL)
 35     {
 36         return -2;
 37     }
 38     node->data = data;
 39     node->next = list->next;
 40     list->next = node;
 41
 42     return 0;
 43 }
 44
 45 int loopList_del_head(loopList *list, loopList **node)
 46 {
 47     if (list == NULL || list->next == list)
 48     {
 49         return -1;
 50     }
 51
 52     *node = list->next;
 53     list->next = list->next->next;
 54     (*node)->next = NULL;
 55
 56     return 0;
 57 }
 58
 59 int loopList_printf(loopList *list)
 60 {
 61     if (list == NULL)
 62     {
 63         return -1;
 64     }
 65
 66     loopList *tmp = list->next;
 67     while (tmp != list)
 68     {
 69         printf("%d-", tmp->data);
 70         tmp = tmp->next;
 71     }
 72     printf("\n");
 73
 74     return 0;
 75 }
 76
 77 int main(void)
 78 {
 79     int i = 0;
 80     loopList *list = NULL;
 81     loopList *node = NULL;
 82
 83     list = loopList_init();
 84
 85     for (i = 0; i < 10; i++)
 86     {
 87         loopList_add_head(list, i);
 88     }
 89
 90     loopList_printf(list);
 91
 92     loopList_del_head(list, &node);
 93     printf("node:%d\n", node->data);
 94     free(node);
 95     node = NULL;
 96
 97     loopList_printf(list);
 98
 99     return 0;
100 }
时间: 2024-12-28 01:05:47

04 循环链表的相关文章

精体展矿计运界布属点世据真起验青kPswaoY3w

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

而广除还状么林验以适调半去gbQwsadnbQjN

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

线性表.04.链式存储结构(双向循环链表)

以下是用双向循环链表实现的线性表 #include <stdio.h> #include <stdlib.h> #include <time.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int ElemType;//ElemType这里假设为int,可以根据需要进行更改 typedef int Status;//Status是函数的类型,其值是函数结果状态代码,如OK等 t

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要  和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数

双向循环链表的实现

双向循环链表的实现 2013-01-11 09:29:04     我来说两句      作者:坚持理想_面对现实 收藏    我要投稿 在使用链表来解决约瑟夫问题的时候,用到了循环链表.循环链表又分为单向循环链表与双向循环链表,约瑟夫问题采用单项循环链表可以得到很好的而解决了,但是单向链表的很大的缺陷仍然存在,那就是在删除的时候需要两个并排指针同步移动.双向链表就可以解决这个问题,因为在双向链表中的每一个结点都有两个指针域来分别指向其前驱和后继.这样子在遍历链表时不用两个指针,直接使用一个就好

艰辛五天:Ubuntu14.04+显卡驱动+cuda+Theano环境安装过程

题记:从一开始不知道显卡就是GPU(虽然是学计算机的,但是我真的不知道-脑残如我也是醉了),到搞好所有这些环境前后弄了5天时间,前面的买显卡.装显卡和装双系统见另一篇博客装显卡.双系统,这篇主要记录我怎么配置后面的环境,虽然中间重装Ubuntu三次,后面安装过程也没差别. 基础平台:64-bit,Ubuntu14.04 1.安装NVIDIA驱动(参考技术文章,基本是复制啊,蟹蟹作者~) (1) 在官网下载NVIDIA驱动,根据自己买的型号选择下载,放到 /home/lvxia/ 目录下面,我下载

[转]ubuntu16.04安装teamviewer12依赖包解决

安装teamviewer下载地址:http://www.teamviewer.com/en/download/linux/ 下载的是:teamviewer_12.0.76279_i386.deb 安装时过程: ?  下载 sudo dpkg -i teamviewer_12.0.76279_i386.deb (正在读取数据库 ... 系统当前共安装有 180540 个文件和目录.) 正准备解包 teamviewer_12.0.76279_i386.deb  ... 正在将 teamviewer:

Install Windows10 + Ubuntu16.04 based on UEFI+GPT

博主电脑:lenove B40-80 一.进入Bios,设置我们之后装双系统将要用到的选项.(1)将USB boot设为Enabled(2)将boot mode设为UEFI(3)将secure boot关闭 二.USB安装Windows10,安装完毕,进入Windows10,在左下角的windows的图标上右键打开磁盘管理,可以利用压缩卷的方法,压缩出一块你想要拿来装ubuntu的分区,压缩完之后,这块分区会显示未分配,这个时候就不用动它了 二,准备一个U盘,用UltraISO将Ubuntu16

Ubuntu 16.04编译Android 7.1.2

折腾了很久,终于搞定了这个环境.记录一下. 准备工作: 1. 首先在Ubuntu官网上下载Ubuntu16.04的官方镜像.官网下载地址(这个找了很久,这里可以直接下载ISO镜像):https://launchpad.net/ubuntu/+cdmirrors 2. 建议直接安装到自己硬盘上(推荐双系统),不要在虚拟机上搞,除非你有足够大的SSD.我之前在虚拟机上试过,电脑的性能完全发挥不出来,后来搞了双系统,发现一切都是那么舒服. 3. Android源码下载方法:https://lug.us