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;
?? ? ? ? ? ?
? ? ? ? ? ? //pTemp的previous指針指向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;
}
轉載于:https://www.cnblogs.com/hmzxwky/p/5051966.html
總結
以上是生活随笔為你收集整理的12月16号 双链表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由 Session 和 Cookie 的
- 下一篇: 编程中的移位运算符简单解释