带头结点的循环单链表----------C语言
/*****************************************************
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语言的更多相关文章
- PTA 循环单链表区间删除 (15 分)
本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...
- C语言版本:循环单链表的实现
SClist.h #ifndef __SCLIST_H__ #define __SCLIST_H__ #include<cstdio> #include<malloc.h> # ...
- 循环单链表定义初始化及创建(C语言)
#include <stdio.h> #include <stdlib.h> /** * 含头节点循环单链表定义,初始化 及创建 */ #define OK 1; #defin ...
- c语言循环单链表
/************************************************************************* > File Name: singleLin ...
- c语言有头循环单链表
/************************************************************************* > File Name: singleLin ...
- C代码实现非循环单链表
C代码实现非循环单链表, 直接上代码. # include <stdio.h> # include <stdlib.h> # include <malloc.h> ...
- 简单约瑟夫环的循环单链表实现(C++)
刚刚接触C++以及数据结构,今天做了第一次尝试用C++和数据结构解决问题,问题是基于约瑟夫环问题的简单版. 先来看看约瑟夫环问题的介绍: 约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3.. ...
- 不带头结点的单链表------C语言实现
File name:no_head_link.c Author:SimonKly Version:0.1 Date: 2017.5.20 Description:不带头节点的单链表 Funcion L ...
随机推荐
- Oracle中start with...connect by (prior)子句的用法
connect by 是结构化查询中用到的,基本语法是:select … from tablenamestart with 条件1connect by 条件2where 条件3; 例:select * ...
- Android代码学习--点击事件的几种写法
由来:常规的写法参见<写一个apk>,每次点击按钮,按钮先查找文本框等元素,然后再操作,其实查找操作是很费时的操作,因此将该定义放到Activity的onCreate中:Oncreate只 ...
- javascript全量匹配屏蔽词
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java %d %n \n
Java中,%d和%f分别用来表示输出时,替换整型输出和浮点型输出的占位符. 如: int a=28; float b = 13.0f; System.out.printf("整数是:%d% ...
- shell 读取配置文件的用法
https://blog.csdn.net/qq_36684665/article/details/81134179 亲测有用!
- mvnw简介
- 关于java使用json不能够使用报没有导包的问题,以及前后台交互json数据的使用
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/12/02/%e5%85%b3%e4%ba%8ejava%e4%bd%bf%e7%94%a8 ...
- python面试题之补充缺失的代码
补充缺失的代码 def print_directory_contents(sPath): """ 这个函数接受文件夹的名称作为输入参数, 返回该文件夹中文件的路径, 以及 ...
- CF1220F
CF1220F 把整棵树分成1的左边和1的右边两部分 最优情况两边子树深度的差一定可以是一 如果还可以是2,也可以通过把多的那一边的点往另一边移使他变成1 如果往一个端点加点,一定不会使这一边变优,也 ...
- Javascript中的Date()对象
创建一个指定的事件对象 需要在构造函数中传递一个表示时间的字符串作为参数例:var d2=new Date("8/27/2019"); 如果直接使用构造函数创建一个Date对象,则 ...