极为简单的双向链表



(Bug横行,求指正)

//双向链表.cpp:定义控制台应用程序的入口点。

//作者Ricardo.M.Tan

 

#include"stdafx.h"

#include"malloc.h"

#include"string.h"

#include"stdio.h"

#include<iostream>

 

typedefintDataType;

typedefstructLNode{

   DataType data;

   structLNode *prior;            //声明一个用于指向前一个节点的指针

   structLNode *next;             //声明一个用于指向后一个节点的指针

}LNode,*Link;

 

//创建链表

Link CreatList(){

   Link head, tmp, p;

   head = (Link)malloc(sizeof(DataType));

   p = head;

   intData;

   scanf_s("%d",&Data);

   while(Data != 0){

        tmp =(Link)malloc(sizeof(DataType));

        tmp->data= Data;

        p->next= tmp;

        tmp->prior= p;           //p指针前移之前完成后与前的链接,若将p=p->next;置于此句之前,则链表会断开

     p =p->next;

        scanf_s("%d", &Data);

   }

   //收尾,首尾互相扣接

   p->next= head;

   head->prior= p;

   return(head);

}

 

//遍历链表

void output(LinkH){

   Link p =H;

   printf("正向链表:\n");

   while(p->next !=H){

        printf("%4d",p->next->data);

        p =p->next;

   }

 

   p =H;

   printf("反向链表:\n");

   while(p->prior !=H){

        printf("%4d", p->prior->data);

        p =p->prior;

   }

}

 

//主函数入口

int main(){

   Link h = CreatList();

   output(h);

   system("pause");     //控制闪退

   return0;

}



猜你喜欢

转载自blog.csdn.net/ricardomtan/article/details/64934030