• 22 链栈


    1,定义一个链栈,并压入一个元素

     1 //定义一个链栈,并压入一个元素
     2 
     3 /*
     4 #include<stdio.h>
     5 #include<stdlib.h>
     6 
     7 //定义链栈结点结构
     8 typedef struct LinkStackNode {
     9     int data;
    10     struct LinkNode* next;
    11 }LSNode;
    12 
    13 //进栈
    14 void push(LSNode* LS, int elem) {
    15     //将 elem 压入栈 LS 中
    16     LSNode* new_node = (LSNode*)malloc(sizeof(LSNode)); //创建一个结点
    17     if (new_node == NULL) {
    18         printf("创建链栈结点失败
    ");
    19         exit(0);
    20     }
    21     else {
    22         new_node->data = elem;
    23         new_node->next = LS->next; //给新结点的指针域赋值,新结点指向当前栈顶结点指向的下一个结点
    24         LS = new_node; //新结点成为新的栈顶结点
    25         printf("将%d压入链栈后,栈顶元素是:%d
    ", elem, LS->data);
    26     }
    27 
    28 }
    29 void main() {
    30     LSNode* mystack = (LSNode*)malloc(sizeof(LSNode));
    31     push(mystack, 1);
    32     push(mystack, 2);
    33 }
    34 */

    2,初始化 压入10个元素进栈,并遍历打印出链栈中的全部元素

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 //定义链栈结点结构
     5 typedef struct LinkStackNode {
     6     int data;
     7     struct LinkStackNode* next;
     8 }LSNode;
     9 
    10 //进栈
    11 LSNode* push(LSNode* LS) {  //LS是栈顶结点
    12     
    13     for (int i = 0; i < 10; i++) {
    14         LSNode* new_node = (LSNode*)malloc(sizeof(LSNode)); //创建一个结点
    15 
    16         if (new_node == NULL) {
    17             printf("创建链栈结点失败
    ");
    18             exit(0);
    19         }
    20         else {
    21             new_node->data = i;
    22             new_node->next = LS; //给新结点的指针域赋值,新结点指向当前栈顶结点
    23             LS = new_node; //新结点成为新的栈顶结点
    24             //printf("将%d压入链栈后,栈顶元素是:%d
    ", i, LS2->data);
    25         }
    26     }
    27     return LS;
    28 }
    29 
    30 //遍历打印出栈中的全部元素
    31 void showStack(LSNode* LS) {
    32     printf("链栈中的元素是:
    ");
    33     LSNode* tmp;
    34     for (tmp = LS; tmp != NULL; tmp = tmp->next) { //遍历时,注意tmp!=NULL,不是 tmp->next!=NULL,前者可以遍历到栈底结点,后者栈底结点遍历不到
    35         printf("%d  ", tmp->data);
    36     }
    37 }
    38 
    39 void main() {
    40     LSNode* mystack = NULL;
    41     mystack = push(mystack);
    42     showStack(mystack);
    43     
    44 }

    3,出栈

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义链栈结点结构
    typedef struct LinkStackNode {
        int data;
        struct LinkStackNode* next;
    }LSNode;
    
    //进栈
    LSNode* push(LSNode* LS) {  //LS是栈顶结点
    
        for (int i = 0; i < 10; i++) {
            LSNode* new_node = (LSNode*)malloc(sizeof(LSNode)); //创建一个结点
    
            if (new_node == NULL) {
                printf("创建链栈结点失败
    ");
                exit(0);
            }
            else {
                new_node->data = i;
                new_node->next = LS; //给新结点的指针域赋值,新结点指向当前栈顶结点
                LS = new_node; //新结点成为新的栈顶结点
                //printf("将%d压入链栈后,栈顶元素是:%d
    ", i, LS2->data);
            }
        }
        return LS;
    }
    
    //遍历打印出栈中的全部元素
    void showStack(LSNode* LS) {
        printf("链栈中的元素是:
    ");
        LSNode* tmp;
        for (tmp = LS; tmp != NULL; tmp = tmp->next) { //遍历时,注意tmp!=NULL,不是 tmp->next!=NULL,前者可以遍历到栈底结点,后者栈底结点遍历不到
            printf("%d  ", tmp->data);
        }
        printf("
    ");
    }
    
    //出栈
    void pop(LSNode* LS) {
        LSNode* tmp = LS;
        LS = tmp->next;
        printf("出栈元素是:%d
    ", tmp->data);
        free(tmp);
        printf("栈顶元素是:%d
    ", LS->data);
    }
    
    
    void main() {
        LSNode* mystack = NULL;
        mystack = push(mystack);
        showStack(mystack);
        pop(mystack);
    }

    从栈顶到栈底依次出栈:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 //定义链栈结点结构
     5 typedef struct LinkStackNode {
     6     int data;
     7     struct LinkStackNode* next;
     8 }LSNode;
     9 
    10 //进栈
    11 LSNode* push(LSNode* LS) {  //LS是栈顶结点
    12 
    13     for (int i = 0; i < 10; i++) {
    14         LSNode* new_node = (LSNode*)malloc(sizeof(LSNode)); //创建一个结点
    15 
    16         if (new_node == NULL) {
    17             printf("创建链栈结点失败
    ");
    18             exit(0);
    19         }
    20         else {
    21             new_node->data = i;
    22             new_node->next = LS; //给新结点的指针域赋值,新结点指向当前栈顶结点
    23             LS = new_node; //新结点成为新的栈顶结点
    24             //printf("将%d压入链栈后,栈顶元素是:%d
    ", i, LS2->data);
    25         }
    26     }
    27     return LS;
    28 }
    29 
    30 //遍历打印出栈中的全部元素
    31 void showStack(LSNode* LS) {
    32     printf("链栈中的元素是:
    ");
    33     LSNode* tmp;
    34     for (tmp = LS; tmp != NULL; tmp = tmp->next) { //遍历时,注意tmp!=NULL,不是 tmp->next!=NULL,前者可以遍历到栈底结点,后者栈底结点遍历不到
    35         printf("%d  ", tmp->data);
    36     }
    37     printf("
    ");
    38 }
    39 
    40 //出栈
    41 void pop(LSNode* LS) {
    42     while (LS != NULL) {
    43         LSNode* tmp = LS;
    44         LS = tmp->next;
    45         printf("出栈元素是:%d
    ", tmp->data);
    46         free(tmp);
    47         printf("栈顶元素是:%d
    ", LS->data);
    48     }
    49 }
    50 
    51 
    52 void main() {
    53     LSNode* mystack = NULL;
    54     mystack = push(mystack);
    55     showStack(mystack);
    56     pop(mystack);
    57 }

  • 相关阅读:
    (视频)Erich Gamma 与 Visual Studio Online 的一点野史
    三维重建技术概述
    三维重建基础
    用户故事驱动的敏捷开发 – 2. 创建backlog
    用户故事驱动的敏捷开发 – 1. 规划篇
    TFS 10周年生日快乐 – TFS与布莱恩大叔的故事
    【DevOps敏捷开发动手实验】开源文档 v2015.2 stable 版发布
    看见的力量 – (II) 影响地图
    看见的力量 – (I) 解题的思维
    UDAD 用户故事驱动的敏捷开发 – 演讲实录
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12563179.html
Copyright © 2020-2023  润新知