12月16号 双链表

      双链表是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

 

 

#include <stdio.h>

#include <stdlib.h>

 

//创建双链表中的一个结点的结构体

typedef struct node{

    struct node *previous;

    int age;

    struct node *next;

}Node;

 

int main(int argc, const char * argv[]) {

    

    //创建头指针

    Node *pHead = NULL;

    Node *pTail = NULL;

    

    for (int i = 0; i < 5; i++) {

        //为结点申请一片内存空间

        Node *pTemp = (Node *)malloc(1 * sizeof(Node));

        if (pTemp == NULL) {

            exit(EXIT_FAILURE);

        }

        

        //age

        printf("请输入年龄:");

        scanf("%d", &pTemp->age);

        

        //next

        pTemp->next = NULL;

        

        //previous

        if (pHead == NULL) {

            //这个是第一个结点,第一个结点的previous指针为空

            pTemp->previous = NULL;

            

            //pTemp指向的结点成为第一个结点

            pHead = pTemp;

            pTail = pTemp;

        } else{

            //pTail指向的结点的next指针指向现在创建的pTemp结点

            pTail->next = pTemp;

            

            //pTempprevious指针指向pTail结点

            pTemp->previous = pTail;

            

            //pTail指针指向最后一个结点

            pTail = pTemp;

            

            //头结点的previous指针指向最后一个结点

            pHead->previous = pTail;

            

            //尾结点的next指针指向头结点

            pTail->next = pHead;

        }

    }

    

    Node *pTemp = pHead;

    while (pTemp != NULL) {

        printf("%d ", pTemp->age);

        pTemp = pTemp->next;

        if (pTemp == pHead) {

            break;

        }

    }

    printf("\n");

    return 0;

}

posted @ 2015-12-16 18:16  南城半夏北风过丶  阅读(100)  评论(0编辑  收藏  举报