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
原创粉丝点击