/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co., Ltd.
File name:
Author:Jerey_Jobs Version:0.1 Date:
Description:
Funcion List:
*****************************************************/
/******双向链表带表头结点*****/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/********定义链表结构体*****/
typedef struct node
{
int num;
struct node *prior; //结点的前驱
struct node *next; //结点的后继
}Node,*link;
/******功能:判断分配空间是否成功函数*******
******函数名 malloc_is_ok()函数********
******形参 link new_node (一级指针)********/
int malloc_is_ok(link new_node)
{
if(NULL==new_node)
{
printf("分 配 不 成 功\n");
return 0; //分配不成功返回值为0;
}
else
{
return 1; //分配成功返回值为1;
}
}
/********功能:创建链表的结点*******
********函数名 creat_node()函数****
********形参 link *new_node(二级指针)**/
void creat_node(link *new_node)
{
int count=10;
do{
*new_node=(link)malloc(sizeof(Node));
}while(!malloc_is_ok(*new_node)&&(--count));
//调用malloc_is_ok()函数,结合希望创建结点个数,判断空间是否分配成功;
}
/********功能:创建空链表***********
********函数名 creat_link()函数****
********形参 link *head(二级指针)**/
void creat_link(link * head)
{
if((*head)==NULL)
{
printf("错误");
exit(-1);
//判断头指针是否为空,如果为空,则退出;
}
creat_node(head);
//创建表头结点;
(*head)->prior=(*head)->next=*head;
//创建双向链表,构成前驱环和后继环;
}
/********功能:链表的头插**********************
********函数名 insert_node_head()函数****
********形参 link *head(二级指针) link new_node插入的结点(一级指针)******/
void insert_node_head(link head,link new_node)
{
new_node->prior=head;
new_node->next=head->next;
head->next=new_node;
new_node->next->prior=new_node;
}
/********功能:链表的尾插**********************
********函数名 insert_node_tail()函数********
********形参 link head(一级指针) link new_node插入的结点(一级指针)******/
void inse
双向循环链表带表头结点(各基本操作的小扩展代码)
最新推荐文章于 2023-08-25 22:10:45 发布