• 静态栈C语言


      1 /*****************************************************
      2 Author:Simon_Kly    Version:0.1    Date: 20170520
      3 Description:静态栈
      4 Mail: degaullekong@gmail.com
      5 Funcion List: 
      6 *****************************************************/
      7 
      8 #include <stdio.h>
      9 #include <stdlib.h>
     10 
     11 
     12 #define SIZE 10
     13 
     14 enum result {FULL_OK = 100, FULL_NO, EMPTY_OK, EMPTY_NO, PUSH_OK, PUSH_NO, POP_OK, POP_NO};
     15 
     16 typedef struct stack_node
     17 {
     18     int data[SIZE];
     19     int top;
     20 }Stack;
     21 
     22 /*创建栈*/
     23 void create_stack(Stack ** stack)
     24 {
     25     *stack = (Stack *)malloc(sizeof(Stack));
     26     if (NULL == *stack)
     27     {
     28         printf("malloc error!\n");
     29         exit(-1);
     30     }
     31 
     32     (*stack)->top = -1;
     33 }
     34 
     35 /*初始化栈*/
     36 void init_stack(Stack *stack)
     37 {
     38     stack->top = -1;
     39 }
     40 
     41 /*判断栈是否满*/
     42 int is_stack_full(Stack *stack)
     43 {
     44     if (stack->top == SIZE - 1)//栈已满
     45     {
     46         return FULL_OK;
     47     }
     48 
     49     return FULL_NO;//栈不满
     50 }
     51 /*压栈*/
     52 void push_stack(Stack *stack, int data)
     53 {
     54     if (FULL_OK == is_stack_full(stack))
     55     {
     56         printf("stack is full!\n");
     57         return ;
     58     }
     59     else
     60     {
     61         stack->top++;
     62         stack->data[stack->top] = data;
     63     }
     64 }
     65 
     66 /*判断栈是否空*/
     67 int is_stack_empty(Stack *stack)
     68 {
     69     if (-1 == stack->top)
     70     {
     71         return EMPTY_OK;//栈空
     72     }
     73 
     74     return EMPTY_NO;//不为空
     75 }
     76 
     77 /*出栈*/
     78 int pop_stack(Stack *stack)
     79 {
     80     if (EMPTY_OK == is_stack_empty(stack))
     81     {
     82         printf("stack is empty!\n");
     83         return POP_NO;
     84     }
     85     else
     86     {
     87         return stack->data[stack->top--];
     88     }
     89 }
     90 
     91 /*读栈顶*/
     92 void read_stack_top(Stack *stack)
     93 {
     94     if (EMPTY_OK == is_stack_empty(stack))//判断栈是否空
     95     {
     96         printf("stack is empty!\n");
     97         return ;
     98     }
     99 
    100     printf("stack top is %d\n", stack->data[stack->top]);
    101 
    102 }
    103 
    104 int main()
    105 {
    106     Stack *stack;
    107     int i;
    108     int ret;
    109 
    110     create_stack(&stack);
    111     init_stack(stack);//栈的初始化
    112 
    113     //进栈
    114     for (i = 0; i < SIZE; i++)
    115     {
    116         push_stack(stack, i + 1);
    117     }
    118     //出栈
    119     for (i = 0; i < SIZE; i++)
    120     {
    121         read_stack_top(stack);
    122         ret = pop_stack(stack);
    123         
    124         if (ret == POP_NO)
    125         {
    126             break;
    127         }
    128         printf("%d\n", ret);
    129     }
    130     putchar(10);
    131     
    132     read_stack_top(stack);
    133 
    134     free(stack);
    135     return 0;
    136 }
  • 相关阅读:
    XE8下安装IntraWeb 14.0.40和D7下安装IntraWeb 11.0.63破解版的正确方法
    网易博客打不开怎么办
    SQL SERVER 导入EXCEL的存储过程
    TMemoryStream、String与OleVariant互转
    【转载】Delphi Idhttp的get和post方法
    sqlserver得到行号
    Delphi 中的 XMLDocument 类详解(5)
    10款免费且开源的项目管理工具
    iOS开发者必备:九大设计类工具
    15个步骤创立技术公司,并收获千万用户(完结)
  • 原文地址:https://www.cnblogs.com/SimonKly/p/6890510.html
Copyright © 2020-2023  润新知