(1)有头头插双链表
#include <stdio.h>
#include <stdlib.h>
typedef struct person
{
int age;
struct person *pre;
struct person *next;
}per;
per *head_list(per *one, int num)
{
per *temp = (per *)malloc(sizeof(per));
temp->age = num;
temp->pre = NULL;
per *head = one->next; //因为是有头,标记one->next 为 '头' head
if(NULL != head) //头插
{
head->pre = temp;
temp->next = head;
}
one->next = temp; //取下一个
}
void show(per *head)
{
if(NULL == head->next)
{
return;
}
per *t = NULL;
while(head->next)
{
t = head->next;
printf("age is %d\n",head->next->age);
head = head->next;
}
printf("=====================\n");
while(t)
{
printf("age is %d\n",t->age);
t = t->pre;
}
}
int main()
{
int i = 0;
per head;
head.pre = NULL;
head.next = NULL;
while(i++ < 6)
{
head_list(&head,i);
}
show(&head);
return 0;
}
(2)有头尾插双链表
#include <stdio.h>
#include <stdlib.h>
typedef struct person
{
int age;
struct person *pre;
struct person *next;
}per;
per *tail_list(per *one, int num)
{
per *temp = (per *)malloc(sizeof(per));
temp->age = num;
per *head = one->next;
per *t = one->next;
while(one->next) //尾插
{
t = one->next;
one = one->next;
}
one->next = temp;
temp->pre = t;
return head;
}
void show(per *head)
{
if(NULL == head->next)
{
return;
}
per *t = NULL;
while(head->next)
{
t = head->next;
printf("age is %d\n",head->next->age);
head = head->next;
}
printf("===================\n");
while(t)
{
printf("age is %d\n",t->age);
t = t->pre;
}
}
int main()
{
int i = 0;
per head;
head.next = NULL;
head.pre = NULL;
while(i++ < 6)
{
tail_list(&head,i);
}
show(&head);
return 0;
}