• <算法编程> 两个栈实现一个队列


     1 #include<iostream>
     2 using namespace std;
     3 
     4 typedef struct Node
     5 {
     6     int num;
     7     Node* pNext;
     8 }Stack,Queue;
     9 
    10 //栈的入栈相当于 链表的头插
    11 Stack* stack_push(Stack** pTop,int num)
    12 {
    13     Stack* pNode = (Stack*)malloc(sizeof(Stack));
    14     pNode->num = num;
    15     pNode->pNext = NULL;
    16 
    17     pNode->pNext = *pTop;
    18     *pTop = pNode;
    19     
    20     return *pTop;
    21 }
    22 
    23 int stack_pop(Stack** pTop)
    24 {
    25     if((*pTop) == NULL) return -1;
    26 
    27     Stack* pPop = *pTop;
    28     int num = pPop->num;
    29     
    30     *pTop = (*pTop)->pNext;
    31     free(pPop);
    32     pPop = NULL;
    33     
    34     return num;
    35 }
    36 
    37 void PrintStack(Stack* pTop)
    38 {
    39     cout << "当前栈顶元素为:" << pTop->num << endl;
    40 }
    41 
    42 //队列的进栈
    43 Queue* queue_push(Stack** pTop1,Stack** pTop2,int num)
    44 {
    45     //首先判断 栈2中有没有元素 如果有 全部压回栈1中
    46     if((*pTop2) != NULL)
    47     {
    48         while((*pTop2) != NULL)
    49         {
    50             stack_push(pTop1,stack_pop(pTop2));
    51         }
    52     }
    53 
    54     //现有元素已经全部在栈1中 或栈1为空
    55     //直接压栈
    56     stack_push(pTop1,num);
    57 
    58     return (Queue*)pTop1;
    59 }
    60 
    61 int queue_pop(Stack** pTop1,Stack** pTop2)
    62 {
    63     //判断栈1中有没有元素 如果有 就把栈1中的所有元素都压入栈2后弹出
    64     if((*pTop1) != NULL)
    65     {
    66         while((*pTop1) != NULL)
    67         {
    68             stack_push(pTop2,stack_pop(pTop1));
    69         }
    70     }
    71 
    72     return stack_pop(pTop2);
    73 }
    74 
    75 int main()
    76 {
    77     Stack* pTop1 = NULL; //用来进栈的
    78     Stack* pTop2 = NULL; //用来出栈的
    79     /*stack_push(&pTop,1);
    80     stack_push(&pTop,2);
    81     stack_push(&pTop,3);
    82     stack_push(&pTop,4);
    83     PrintStack(pTop);
    84     cout << "弹出栈顶元素:" << stack_pop(&pTop) << endl;
    85     cout << "弹出栈顶元素:" << stack_pop(&pTop) << endl;
    86     cout << "弹出栈顶元素:" << stack_pop(&pTop) << endl;
    87     cout << "弹出栈顶元素:" << stack_pop(&pTop) << endl;
    88     cout << "弹出栈顶元素:" << stack_pop(&pTop) << endl;*/
    89     queue_push(&pTop1,&pTop2,1);
    90     queue_push(&pTop1,&pTop2,2);
    91     queue_push(&pTop1,&pTop2,3);
    92     queue_push(&pTop1,&pTop2,4);
    93     queue_pop(&pTop1,&pTop2);
    94     queue_pop(&pTop1,&pTop2);
    95 
    96     system("pause");
    97     return 0;
    98 }
  • 相关阅读:
    Window下安装redis
    Redhat安装python环境(readline模块)
    Golang之hello,beego
    Golang之go 命令用法
    Golang之Mysql事务
    Golang之waitgroup用法
    记录java版本不兼容的坑,(kafka运行报错)
    位运算的技巧(有拓展的技巧)
    关于单片机软件框架的一点思考
    解决main.o(.data) type RW incompatible with bsp.o(.ARM.__AT_0x24001000) type ZI in er RW_IRAM2.(转载)
  • 原文地址:https://www.cnblogs.com/Aaaaaalei0612/p/11221005.html
Copyright © 2020-2023  润新知