#include<stdlib.h>
struct dlist
{
int data;
struct dlist *front; //指向下一结点的指针
struct dlist *back; //指向前一结点的指针
};
typedef struct dlist dnode: //链表新类型
typedef dnode *dlink; //链表指针新类型
dlink createdlist(int *array,int len)
(
dlink head; //双向链表指针
dlink before; //前一结点的指针
dlink new_node; //新结点的指针
int i;
head = (dlink) malloc(sizeof(dnode));
if (!head) //检查内存指针
return NULL;
head->data = array[0];
head->front = NULL;
head->back = NULL;
before = head;
for( i=1;i< len; i++)
{
new_node = (dlink)malloc(sizeof(dnode));
if(!new_node)
return NULL;
new_node->data = array[i]; //创建结点内容
new_node->front = NULL; //设置指针初值
new_node->back = before; //将新结点指向前结点
before->front = new_node; //将前结点指向新结点
before = new_node; //新结点成为前结点
}
return head;
)
void printdlist(dlink head,dlink now)
{
while( head!=NULL)
{
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 = chreatedlist(list,6);
if(head == NULL)
{
printf("error!/n");
exit(1);
}
now = head; //目前指向第一结点
while (1)
{
printf("链表内容是: ");
printflist(head,now);
printf("[1]往下移动 [2]往回移动 [3] 离开 ==> ");/
scanf("%d",&select);
switch(select)
{
case 1: if (now->front!=NULL)
now = now->front;
break;
case 2: if (now->back !=NULL)
break;
case 3: exit(1);
}
}
}