/*****************************************************
Author:Simon_Kly Version:0.1 Date: 20170520
Description:循环单链表
Mail:degaullekong@gmail.com
Funcion List:
*****************************************************/ #include <stdio.h>
#include <stdlib.h> typedef struct node
{
int data;
struct node *next;
}Node, *Link; /*判断malloc是否成功执行*/
void is_malloc_ok(Link node)
{
if(node == NULL)
{
printf("malloc error!\n");
exit(-);
}
} /*创建单链表*/
void create_link(Link * head)
{
*head = (Link)malloc(sizeof(Node));
is_malloc_ok(*head);
(*head)->next = *head;
} /*创建节点*/
void create_node(Link * new_node)
{
*new_node = (Link)malloc(sizeof(Node));
is_malloc_ok(*new_node);
(*new_node)->next = NULL;
} /*插入节点尾插法*/
void insert_node_tail(Link head, Link new_node)
{
Link p = NULL; p = head; while (p->next != head)
{
p = p->next;
}
new_node->next = head;
p->next = new_node;
} /*插入节点头插*/
void insert_node_head(Link head, Link new_node)
{
new_node->next = head->next;
head->next = new_node;
} /*输出链表*/
void output_link(Link head)
{
Link p = NULL; if (head == NULL)
{
printf("link is not exist!\n");
return ;
}
else if(head->next == head)
{
printf("link is empty!\n");
return ;
} p = head->next; while (p != head)
{
printf("%d\n", p->data);
p = p->next;
}
} /*置为空链*/
void make_link_empty(Link *head)
{
Link p = NULL; p = (*head)->next; while (*head != (*head)->next)
{
(*head)->next = (*head)->next->next;
free(p);
p = (*head)->next;
}
} /*销毁链*/
void release_link(Link * head)
{
make_link_empty(head);
free(*head);
*head = NULL;
} int main()
{
int i;
Link head = NULL;
Link new_node = NULL; output_link(head);
create_link(&head);
output_link(head);
for (i = ; i < ; i++)
{
create_node(&new_node);
new_node->data = i + ;
insert_node_tail(head, new_node);
}
output_link(head); create_node(&new_node);
new_node->data = ;
insert_node_head(head, new_node);
output_link(head); release_link(&head); output_link(head);
return ;
}

循环单链表的于单链表唯一的不同:在对链表中添加或者删除节点时一定要保持链表的头尾连接,在遍历时不能再以NULL为循环结束判断条件,应该使用头和尾相等来判断整个链表结束。

带头结点的循环单链表----------C语言的更多相关文章

  1. PTA 循环单链表区间删除 (15 分)

    本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...

  2. 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...

  3. C语言版本:循环单链表的实现

    SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...

  4. 循环单链表定义初始化及创建(C语言)

    #include <stdio.h> #include <stdlib.h> /** * 含头节点循环单链表定义,初始化 及创建 */ #define OK 1; #defin ...

  5. c语言循环单链表

    /************************************************************************* > File Name: singleLin ...

  6. c语言有头循环单链表

    /************************************************************************* > File Name: singleLin ...

  7. C代码实现非循环单链表

    C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...

  8. 简单约瑟夫环的循环单链表实现(C++)

    刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...

  9. 不带头结点的单链表------C语言实现

    File name:no_head_link.c Author:SimonKly Version:0.1 Date: 2017.5.20 Description:不带头节点的单链表 Funcion L ...

随机推荐

  1. 新手指南:DVWA-1.9全级别教程之SQL Injection

    *本文原创作者:lonehand,转载须注明来自FreeBuf.COM 目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk/),而网上的教程大多停留在旧版本,且没有针 ...

  2. 2019牛客第八场多校 E_Explorer 可撤销并查集(栈)+线段树

    目录 题意: 分析: @(2019牛客暑期多校训练营(第八场)E_Explorer) 题意: 链接 题目类似:CF366D,Gym101652T 本题给你\(n(100000)\)个点\(m(1000 ...

  3. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  4. windbg show args after breakpoint

    bp ntdll!NtOpenFile ".echo ####################;du poi(ebp+8);.echo ########################;&q ...

  5. 基于turtle库的七段数码管绘制

    ·文章结构 >样例及概览 >函数框架分析 >功能发展·样例及概览 七段数码管,是信号灯.电子表等很多设备的显示形式.而利用python的turtle库,我们也可以模拟着写出一个动态生 ...

  6. Python List列表的操作说明

    Python中List的N种操作,其简单程度令人叹为观止... C:\Users\rhys>python Python 2.7.14 (v2.7.14:84471935ed, Sep 16 20 ...

  7. 【react】---redux-actions的基本使用---【巷子】

    一.安装 cnpm install --save redux-actions 二.为什么使用 redux-actions reducer使用switch case语句进行action类型判断,当act ...

  8. Catch and Buffer

    通常人们所说的Cache就是指缓存SRAM. SRAM叫静态内存,“静态”指的是当我们将一笔数据写入SRAM后,除非重新写入新数据或关闭电源,否则写入的数据保持不变. 由于CPU的速度比内存和硬盘的速 ...

  9. Django框架(二十三)—— Django rest_framework-解析器

    解析器 一.解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理,将传过来的数据解析成字典 二.使用解析器 1.局部使用 在视图类中重定义parser_classe ...

  10. 在apache hadoop2.6 上部署hive 并将hive数据源存储于Mysql

    集成hive 的前提是apache hadoop 集群能够正常启动. hadoop 版本 apach2.6.0  hive 版本:1.2.1 1.安装mysql 并赋予权限: 1.1:创建hive 用 ...