#include <stdlib.h> /*含ma l l o c ( ) 的头文件*/
#include <stdio.h>
struct Node
{
Node* previous;
int data;
Node* next;
};
Node* create();
void out_Node(Node *);
int main()
{
Node *head;
head = create();
printf("双向链表建立成功");
out_Node(head);
system("pause");
}
Node* create()
{
Node * p;
Node * h;
Node * l;
int n, i, x;
h = (Node *)malloc(sizeof(Node));
h->previous = h;//当空的双向链表就像上图那样前驱和后驱都会指向自己;
h->next = h;
p = h;
printf("请输入需要创建双向链表的长度:");
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
printf("请输入第%d个数", i + 1);
scanf_s("%d", &x);
l = (Node *)malloc(sizeof(Node));
l->data = x;
p->next = l;
l->previous = p;
l->next = h;//注意,l->next链接的是头节点,
h->previous = l;//而头结点的前驱是l。 这样便构成了一个循环的双向链表
p = l;
}
return(h);//不要忘记返回链表
}
void out_Node(Node *l)
{
Node *p;
int i;
p = l;
p = p->next;
while (p != l)
{
printf("%5d", p->data);
p = p->next;
}
}
双向链表的建立
最新推荐文章于 2023-03-11 12:19:57 发布