// -------------------------------------------------------
//2014--03--14
// 建立双向链表
// 程序分析:双向链表的节点有两个指针域,一个指向直接前驱,另一个指向直接后继。
// 其中第一个节点的前驱指针为NULL ,最后一个节点的直接后继指针为NULL ;
// -------------------------------------------------------
#include <stdio.h>
#include <time.h>
#include <malloc.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
// -------------------------------------------------------
//*******************************************************
// 结构名:DouLNode ;
// 结构说明:该结构为双向链表的节点结构 ,其中有两个指针,一个关键字
// 参数说明:data 关键字
// prior 指向直接前驱的指针
// next 指向后继节点的指针
//*******************************************************
struct DouLNode
{
int data;
DouLNode *prior;
DouLNode *next ;
};
// -------------------------------------------------------
//*******************************************************
// 函数名:DouLinkCreate();
// 函数功能:建立一个双向链表,
// 参数说明:head 为一个指向双向链表头节点的指针
// size 为双向链表节点的个数
// 注意:这里的双向链表带有头结点,利用的是尾插法。
//*******************************************************
void DouLinkCreate(DouLNode *&head , int size )
{
// 建立第一个节点,配置节点记忆体
head = (DouLNode*)malloc(sizeof(DouLNode) );
head->data = 0 ;
head->prior= NULL ;
head->next = NULL ;
DouLNode * p = head; // 指向头结点
for (int i =0;i<size ;++ i)
{
DouLNode* q = (DouLNode*)malloc(sizeof(DouLNode) );
q->data = i+1;
q->next = NULL ;
q->prior = p;
p->next = q ;
p = q ;
}
}
// -------------------------------------------------------
int main()
{
DouLNode * head ;
DouLinkCreate(head ,10 );
DouLNode * p = head ;
DouLNode * q = NULL ;
p = p->next ;
while (p != NULL )
{
cout << p->data << endl; // 从前往后输出
q = p ;
p = p->next ;
}
cout << endl;
while (q != head )
{
cout << q->data << endl; // 从后往前输出
q = q->prior ;
}
return 0;
}
// -------------------------------------------------------