#include<stdio.h>
#include<stdlib.h>
//雙向鏈表結(jié)構(gòu)
struct dlist
{
int data;
struct dlist *front;//指向下一結(jié)點(diǎn)的指針
struct dlist *back;//指向前一結(jié)點(diǎn)的指針
};
typedef struct dlist dnode;
typedef dnode *dlink;
dlink createdlist(int *array,int len)
{
dlink head;
dlink before;
dlink new_node;
int i;
//創(chuàng)建第一個(gè)結(jié)點(diǎn),分配指針內(nèi)存
head=(dlink)malloc(sizeof(dnode));
if(!head)
return NULL;
head->data=array[0];
head->front=NULL;
head->back=NULL;
before=head;//指向第一個(gè)結(jié)點(diǎn)
for(i=1;i<len;i++)//用循環(huán)創(chuàng)建其他結(jié)點(diǎn)
{
new_node=(dlink)malloc(sizeof(dnode));
if(!new_node)
return NULL;
new_node->data=array[i];
new_node->front=NULL;
new_node->back=before;//將新結(jié)點(diǎn)指向前結(jié)點(diǎn)
before->front=new_node;//將前結(jié)點(diǎn)指向新結(jié)點(diǎn),構(gòu)成循環(huán)鏈表
before=new_node;//新結(jié)點(diǎn)成為前結(jié)點(diǎn)
}
return head;
}
//雙向鏈表的輸出
void printdlist(dlink head,dlink now)
{
while(head!=NULL) //鏈表循環(huán)遍歷
{
if(head == now)
printf("#%d#",head->data);
else
printf("[%d]",head->data);
head=head->front;
}
printf("\n");
}
void main()
{
dlink head;
dlink now=NULL;
int list[6]={1,2,3,4,5,6};
int select;
head=createdlist(list,6);
if(head==NULL)
{
printf("內(nèi)存分配失敗!\n");
exit(1);
}
now=head;
while(1)
{
printf("鏈表內(nèi)容是:");
printdlist(head,now);
printf("[1]往下移動(dòng) [2]往回移動(dòng) [3]離開(kāi) ==> ");
scanf("%d",&select);
switch(select)
{
case 1: if(now->front!=NULL)
now=now->front;
break;
case 2: if(now->back!=NULL)
now=now->back;
break;
case 3: exit(1);
}
}
}