<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      四 棧的鏈式存儲

      簡單鏈式棧

       1 ////////////鏈表結點結構體/////////////
       2 typedef struct Node
       3 {
       4     int data;
       5     Node* next;
       6 }Node;
       7 
       8 //創建結點
       9 Node* createNode(int data)
      10 {
      11     Node* newNode = (Node*)malloc(sizeof(Node));
      12     newNode->data = data;
      13     newNode->next = NULL;
      14     return newNode;
      15 }
      16 
      17 /////////棧結構體////////////////
      18 typedef struct Stack
      19 {
      20     Node* stackTop;    //用棧頂指針表示整個鏈表
      21     int size;
      22 }stack;
      23 
      24 //創建棧
      25 stack* createStack()
      26 {
      27     stack* mystack = (stack*)malloc(sizeof(stack));
      28     mystack->stackTop = NULL;
      29     mystack->size = 0;
      30     return mystack;
      31 }
      32 //入棧
      33 void push(stack* mystack, int data)
      34 {
      35     //入棧--->鏈表的表頭插入
      36     Node* newNode = createNode(data);
      37     newNode->next = mystack->stackTop;
      38     mystack->stackTop = newNode;    //棧頂指針移動
      39     mystack->size++;
      40 }
      41 //獲取棧頂元素
      42 int top(stack* mystack)
      43 {
      44     if (mystack->size == 0)
      45     {
      46         printf("棧為空,無法獲取");
      47         system("pause");
      48         return mystack->size;
      49     }
      50     return mystack->stackTop->data;
      51 }
      52 //出棧
      53 void pop(stack* mystack)
      54 {
      55     if (mystack->size == 0)
      56     {
      57         printf("棧為空,無法獲取");
      58         system("pause");
      59     }
      60     else
      61     {
      62         //緩存
      63         Node* nextNode = mystack->stackTop->next;
      64         //刪除
      65         free(mystack->stackTop);
      66         mystack->stackTop = nextNode;//棧頂指針移動
      67         mystack->size--;
      68     }
      69 }
      70 //判斷棧是否為空
      71 int empty(stack* mystack)
      72 {
      73     if (mystack->size == 0)
      74         return 0;
      75     return 1;    //返回1 表示棧不為NULL
      76 
      77 }
      78 int main()
      79 {
      80     stack* mystack = createStack();
      81     push(mystack, 1);
      82     push(mystack, 2);
      83     push(mystack, 3);
      84     while (empty(mystack))
      85     {
      86         printf("%d-->", top(mystack));
      87         pop(mystack);
      88     }
      89 
      90     system("pause");
      91     return 0;
      92 }

      企業鏈式棧

      linkStack.h

       1 #pragma once
       2 #include <stdio.h>
       3 #include <stdlib.h>
       4 
       5 //鏈表小結點
       6 typedef struct StackNode
       7 {
       8     struct StackNode* next;
       9 }StackNode;
      10 
      11 //鏈棧結構體
      12 typedef struct LinkStack
      13 {
      14     StackNode header;
      15     int size;
      16 }LinkStack;
      17 
      18 //初始化
      19 LinkStack* Init_Stack();
      20 
      21 //壓棧
      22 void Push_Stack(LinkStack* LStack, StackNode* data);
      23 
      24 //彈棧
      25 void* Pop_Stack(LinkStack* LStack);
      26 
      27 //獲取棧頂
      28 void* Top_Stack(LinkStack* LStack);
      29 
      30 //是否為空棧
      31 int IsEmpty_Stack(LinkStack* LStack);
      32 
      33 //返回棧的大小
      34 int Size_Stack(LinkStack* LStack);
      35 
      36 //銷毀棧
      37 void Desory_Stack(LinkStack* LStack);

      linkStack.c

       1 #include "linkStack.h"
       2 
       3 //初始化
       4 LinkStack* Init_Stack()
       5 {
       6     LinkStack* LS = (LinkStack*)malloc(sizeof(LinkStack));
       7     LS->header.next = NULL;
       8     LS->size = 0;
       9     return LS;
      10 }
      11 
      12 //壓棧
      13 void Push_Stack(LinkStack* LStack, StackNode* data)
      14 {
      15     if (LStack == NULL || data == NULL)
      16     {
      17         return;
      18     }
      19     data->next = LStack->header.next;
      20     LStack->header.next=data;
      21     LStack->size++;
      22 }
      23 
      24 //彈棧
      25 void* Pop_Stack(LinkStack* LStack)
      26 {
      27     if (LStack == NULL||LStack->size==0)
      28         return NULL;
      29     StackNode* node = LStack->header.next;
      30     LStack->header.next = node->next;
      31     LStack->size--;
      32     return node;
      33 
      34 }
      35 
      36 //獲取棧頂
      37 void* Top_Stack(LinkStack* LStack)
      38 {
      39     if (LStack == NULL || LStack->size == 0)
      40         return NULL;
      41     StackNode* node = LStack->header.next;
      42     return node;
      43 }
      44 
      45 //返回棧的大小
      46 int Size_Stack(LinkStack* LStack)
      47 {
      48     if (LStack == NULL)
      49         return -1;
      50     return LStack->size;
      51 }
      52 
      53 
      54 //是否為空棧  0 非空 1 空
      55 int IsEmpty_Stack(LinkStack* LStack)
      56 {
      57     if (LStack == NULL || LStack->size == 0)
      58         return 1;
      59     return 0;
      60 }
      61 
      62 //銷毀棧
      63 void Desory_Stack(LinkStack* LStack)
      64 {
      65     if (LStack == NULL)
      66         return;
      67     free(LStack);
      68     LStack = NULL;
      69 }

      main.c

       1 #include "linkStack.h"
       2 
       3 //數據
       4 typedef struct Person
       5 {
       6     StackNode node;
       7     char name[64];
       8     int age;
       9 }Person;
      10 
      11 int main()
      12 {
      13     Person p1 = { "NULL","張飛",21 };
      14     Person p2 = { "NULL","李逵",19 };
      15     Person p3 = { "NULL","何進",23 };
      16     Person p4 = { "NULL","武松",24 };
      17     Person p5 = { "NULL","袁曉",20 };
      18     //創建棧
      19     LinkStack* stack = Init_Stack();
      20     //插入數據
      21     Push_Stack(stack, &p1);
      22     Push_Stack(stack, &p2);
      23     Push_Stack(stack, &p3);
      24     Push_Stack(stack, &p4);
      25     Push_Stack(stack, &p5);
      26     printf("棧頂元素:name=%s age=%d\n", ((Person*)Top_Stack(stack))->name, ((Person*)Top_Stack(stack))->age);
      27     while (!IsEmpty_Stack(stack))
      28     {
      29         Person* p = Pop_Stack(stack);
      30         printf("name=%s age=%d\n", p->name, p->age);
      31     }
      32 
      33     Desory_Stack(stack);
      34     system("pause");
      35     return 0;
      36 }

       

      posted @ 2020-05-09 14:31  mcf8293  閱讀(87)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 平度市| 99福利一区二区视频| 久久久久青草线综合超碰| 国产精品一区二区日韩精品 | 欧美videos粗暴| 亚洲成av人无码免费观看| 无码av中文字幕久久专区| 东京一本一道一二三区| 宿州市| 久久精品国产精品亚洲综合| 经典国产乱子伦精品视频| 中文日产幕无线码一区中文 | 欧美亚洲另类 丝袜综合网| 老司机午夜福利视频| 亚洲国产精品久久久天堂麻豆宅男| 崇礼县| 久久精品色一情一乱一伦| 日韩精品一区二区三区视频| 四虎影院176| 水蜜桃精品综合视频在线| 国产精品久久久午夜夜伦鲁鲁| 人妻精品无码一区二区三区| 国产叼嘿视频一区二区三区| 极品无码国模国产在线观看| 欧美老少配性行为| 国产成人高清亚洲综合| 97午夜理论电影影院| 中文无码乱人伦中文视频在线| 亚洲丶国产丶欧美一区二区三区| 韩国三级+mp4| 精品国产粉嫩一区二区三区| 高清无码在线视频| 亚洲色在线v中文字幕| 久久96热在精品国产高清| 国产精品亚洲аv无码播放| 久久中文字幕一区二区| 国产二区三区不卡免费| 中文字幕亚洲资源网久久| 徐州市| 视频一区视频二区在线视频| 熟女人妇 成熟妇女系列视频|