データ構造の---c言語による双方向リンク操作の実現

3163 ワード

#include<stdio.h>   
#include<stdlib.h>   
typedef int ElemType;
typedef struct DoubleLinkedList  
{  
     ElemType data;  
     struct DoubleLinkedList *pre;  
     struct DoubleLinkedList *next;  
}DlinkedList_Node;  
   
//       
DlinkedList_Node* create_dlink()  
{  
   DlinkedList_Node *head,*p,*s;  
   int x;  
   head = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node));  
   p = head;  
   while(1)  
   {  
       printf("         ,  0    :
"); scanf("%d",&x); if(x != 0) { s = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node)); s ->data = x; s-> pre = p; p->next = s; p=s; } else { printf("

"); break; } } p->next = NULL; head = head ->next; head->pre = NULL; return head; } // 、 void print_dlink(DlinkedList_Node *head) { DlinkedList_Node *p,*s; p = head; printf(" :
"); while(p) { printf("%d ",p->data); s = p; p = p->next; } printf("
:
"); while(s) { printf("%d ",s->data); s = s->pre; } printf("

"); } // DlinkedList_Node* delete_dlinkedlist_node(DlinkedList_Node *head,int i) { DlinkedList_Node *p; p = head; if(p->data == i) { head = p->next; head->pre = NULL; free(p); return head; } while(p) { if(p->data == i) { p->pre->next = p->next; p->next->pre = p->pre; free(p); return head; } p = p->next; } printf(" !,
"); return head; } // DlinkedList_Node* insert_dlinkedlist_node(DlinkedList_Node *head,int i) { DlinkedList_Node *p,*temp; p = head; temp = (DlinkedList_Node*)malloc(sizeof(DlinkedList_Node)); temp ->data = i; if(i < p->data)// , { head = temp; head->next = p;// p head head->pre = NULL; p->pre = head;// p head return head; } while(p != NULL && i > p->data)// { p = p->next; } if(i < p->data)// { temp ->next = p; temp ->pre = p->pre; p ->pre->next = temp; p ->pre = temp; return head; } else// , { p->next = temp; // ,p==NULL temp ->pre = p; temp ->next = NULL; return head; } } int main() { DlinkedList_Node *head; head = create_dlink(); print_dlink(head); return 0; }