双向循环链表

来源:互联网 发布:麒麟外推软件 编辑:程序博客网 时间:2024/06/06 02:03
#include <stdio.h>#include <stdlib.h>struct dblnode{struct dblnode * prior;int num;struct dblnode * next;};typedef struct dblnode Dblnode;typedef struct dblnode * Dbllink;void create_dbllink(Dbllink *head);void create_newnode(Dbllink *newnode);void is_malloc_ok(Dbllink *newnode);void insert_dblnode_head(Dbllink *head,Dbllink *newnode);void forward_Dblnode(Dbllink *head);void backward_Dblnode(Dbllink *head);void create_dbllink(Dbllink *head){create_newnode(head);(*head)->next = (*head)->prior = *head;}void create_newnode(Dbllink *newnode){*newnode = (Dbllink)malloc(sizeof(Dblnode));is_malloc_ok(newnode);}void is_malloc_ok(Dbllink * newnode){if(*newnode == NULL){printf("malloc is error!\n");exit(-1);}}void insert_dblnode_head(Dbllink *head,Dbllink *newnode){(*newnode)->next = (*head)->next;(*newnode)->prior = *head;(*head)->next->prior = *newnode;(*head)->next = *newnode;if((*head)->prior == (*head)){(*head)->prior = *newnode;}}void insert_dblnode_tail(Dbllink *head,Dbllink *newnode){(*newnode)->next = *head;(*newnode)->prior = (*head)->prior;(*head)->prior->next = *newnode;(*head)->prior = *newnode;}void release(Dbllink *head){Dbllink temp;temp = (*head)->next;if((*head)->next == NULL){printf("only head !\n");return;}while((*head)->next != NULL){temp = (*head)->next;(*head)->next = temp->next;free(temp);}printf("free successfully !\n");}void forward_Dblnode(Dbllink *head){Dbllink tmp;tmp = (*head)->next;while(tmp != *head){printf("num = %d\n",tmp->num);tmp = tmp->next;}}void backward_Dblnode(Dbllink *head){Dbllink tmp;tmp = (*head)->prior;while(tmp != *head){printf("num = %d\n",tmp->num);tmp = tmp->prior;}}int main(){Dbllink head = NULL;Dbllink newnode = NULL;int i;int num[10];create_dbllink(&head);for(i = 0;i < 10;i++){create_newnode(&newnode);newnode->num = i;//scanf("%d",num[i]);//insert_dblnode_head(&head,&newnode);insert_dblnode_tail(&head,&newnode);}forward_Dblnode(&head);backward_Dblnode(&head);release(&head);forward_Dblnode(&head);backward_Dblnode(&head);    return 0;}

0 0