C-[双向循环带头链表]-代码
来源:互联网 发布:查域名备案信息 编辑:程序博客网 时间:2024/05/07 06:13
main.c<pre name="code" class="cpp">#include <memory.h>#include <stdio.h>#include <windows.h>#include "linklist.h"void main(void){LinkHead *LinkListHead;LinkNode *a;LinkNode *b;LinkNode *c;LinkListHead = (LinkHead*)malloc(sizeof(LinkHead));a = (LinkNode*)malloc(sizeof(LinkNode));b = (LinkNode*)malloc(sizeof(LinkNode));c = (LinkNode*)malloc(sizeof(LinkNode));//初始化 表头 和 节点InitLinkListHead(LinkListHead);InitLinkListNode(a);InitLinkListNode(b);InitLinkListNode(c);a->value = 1;b->value = 2;c->value = 3;print(LinkListHead);printf(".............\n");//添加节点printf("添加节点后:\n");AddNode(a, LinkListHead, 0);AddNode(b, LinkListHead, 0);AddNode(c, LinkListHead, 0);print(LinkListHead);printf(".............\n");//删除节点printf("删除节点后:\n");DeletNode(0, LinkListHead);print(LinkListHead);printf(".............\n");//清空Empty(LinkListHead);printf("清空后:\n");print(LinkListHead);printf(".............\n");system("pause");}
linklist.h
#ifndef _LINKLIST_H_#define _LINKLIST_H_//定义节点typedef struct node{int value;struct node *next;struct node *prev;}LinkNode;//定义表头typedef struct head{int length;LinkNode *next;LinkNode *prev;}LinkHead;/*先初始化表头才能初始化节点(双向链表带头循环结构)*///初始化表头static __inline void InitLinkListHead(LinkHead *head){head->length = 0;head->next = head;head->prev = head;}//初始化节点static __inline void InitLinkListNode (LinkNode *node ){node->value = 0;node->next = NULL;node->prev = NULL;}//添加static __inline void AddNode(LinkNode *node, LinkHead *head,int pos){int i;LinkHead *current;current = (LinkHead*) malloc (sizeof(LinkHead));current = head;for (i = 0; i < pos; i++){current = current->next;}node->next = current->next;current->next = node;node->prev = node->next->prev;current->next->prev = node;head->length++;}//删除static __inline void DeletNode(int pos,LinkHead *head){int i;LinkHead *current;current = (LinkHead*)malloc(sizeof(LinkHead));current = head;if (pos > head->length){printf("请输入正确的位置\n现有节点个数为:%d",&head->length);return 0;}for (i = 0; i < pos; i++){current = current->next;}current->next = current->next->next;current->next->prev = current;head->length--;}//清空static __inline void Empty(LinkHead *head){head->next = head;head->prev = head;head->length = 0;}//遍历static __inline void print(LinkHead *head){LinkNode *current;current = (LinkNode*)malloc(sizeof(LinkNode));current = head;while (current->next != head){current = current->next;printf("%d\n", current->value);}}#endif
0 0
- C-[双向循环带头链表]-代码
- 【C++】模板实现带头节点的双向循环链表
- 带头结点的双向循环链表
- 带头结点的双向循环链表
- 双向循环链表(带头结点)
- 双向循环带头节点链表
- 带头结点的双向循环链表
- C语言实现双向非循环链表(不带头结点)的基本操作
- C语言实现双向非循环链表(不带头结点)的逆序打印
- C语言实现双向非循环链表(不带头结点)的节点插入
- C语言实现双向非循环链表(不带头结点)的清空
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- C实现头插法和尾插法来构建双向非循环链表(带头结点尾结点)
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- 线性表和带头结点的双向循环链表
- 不带头节点的双向循环链表基本操作
- 带头双向循环链表的插入和删除
- 数据结构示例之带头节点的双向循环链表
- Android项目中引用外部项目library失败的原因
- Linux下批量把GDK编码的文章转化为UTF-8编码的文章以及“iconv: 未知 xxx 处的非法输入序列”错误处理
- UVA 261 - The Window Property(字符串Hash)
- linux mysql 破解root 密码
- 标准IO与文件IO 的区别
- C-[双向循环带头链表]-代码
- 《百度搜索引擎网页质量白皮书》指导网站建设及优化
- Android内存
- android 使用百度地图定位
- sss
- lua io详细操作
- Sun-Java语言编码规范
- RFI\RFP\RFQ的区别
- 重写view的onAttachedToWindow () 和 onDetachedFromWindow ()与Home键屏蔽,捕获,修改