现在的位置: 首页 > 综合 > 正文

双向链表

2013年10月03日 ⁄ 综合 ⁄ 共 1304字 ⁄ 字号 评论关闭

#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);

 }
}

}

【上篇】
【下篇】

抱歉!评论已关闭.