データ構造の---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;
}