zoukankan      html  css  js  c++  java
  • 004、栈的基本操作

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include "math.h"
      4 
      5 typedef struct demo
      6 {
      7     int* base;
      8     int* top;
      9     int stacksize;
     10 }sqstack;
     11 
     12 /* 创建一个栈 */
     13 int stackInit(sqstack* S,int n)
     14 {
     15     S->base = (int*)malloc(sizeof(int)*n);
     16     if(!S->base)
     17     {
     18         printf("stack is null!");
     19         return 0;
     20     }
     21     S->top = S->base;
     22     S->stacksize = n;
     23     return 1;
     24 }
     25 
     26 /* 清空一个栈 */
     27 void clearStack(sqstack* S)
     28 {
     29     S->top = S->base;
     30 }
     31 
     32 /* 销毁一个栈 */
     33 void destroyStack(sqstack* S)
     34 {
     35     free(S->base);
     36     S->base = S->top = NULL;
     37     S->stacksize = 0;
     38 }
     39 
     40 /* 入栈 */
     41 #define STACKINSERSIZE 10
     42 int Push(sqstack* S,int data)
     43 {
     44     if(S->top - S->base >= S->stacksize)
     45     {
     46         S->base = (int*)realloc(S->base,(S->stacksize+STACKINSERSIZE)*sizeof(int));
     47         if(!S->base)    return 0;
     48         S->top = S->base + S->stacksize;
     49         S->stacksize = S->stacksize + STACKINSERSIZE;
     50     }
     51     *(S->top) = data;
     52     S->top++;
     53 
     54     return 1;
     55 }
     56 
     57 /* 出栈 */
     58 int Pop(sqstack* S,int* data)
     59 {
     60     if(S->top == S->base)    return 0;
     61     S->top--;
     62     *data = *(S->top);
     63 }
     64 
     65 int stackLen(sqstack S)
     66 {
     67     return (S.top-S.base);
     68 }
     69 int main()
     70 {
     71     sqstack stack1;
     72     int i,len,sum = 0;
     73     int c;
     74     stackInit(&stack1,20);
     75     clearStack(&stack1);
     76     
     77     printf("please inpot 0 or 1
    ");
     78 //    scanf("%c",&c);
     79     /* 输入0 or 1字符表示二进制,以 # 结束,例如:1111# */
     80     while((c = getchar()) != '#')
     81     {
     82         /* 入栈 */
     83         Push(&stack1,c);
     84 //        scanf("%c",&c);
     85     }
     86     getchar();
     87     len = stackLen(stack1);
     88     printf("
    len = %d
    ",len);
     89     for(i = 0;i < len;i++)
     90     {
     91         /* 出栈 */
     92         Pop(&stack1,&c);
     93         /* 计算将二进制转换成10进制 */
     94         sum = sum + ((c - '0') * (pow(2,i)));
     95     }
     96     printf("decimal is %d
    ",sum);
     97     destroyStack(&stack1);
     98     getchar();
     99     return 0;
    100 }
  • 相关阅读:
    bzoj4321
    bzoj1800
    codeforces396C
    codeforces400C
    codeforces271D
    关于jsp中jstl-core标签循环遍历的使用
    hibernate坑边闲话2
    hibernate坑边闲话
    hibernate中实体与数据库中属性对应的类型
    MySQL的常用命令:添加外键,修改字段名称,增加字段 设置主键自增长等
  • 原文地址:https://www.cnblogs.com/yang-cheng/p/12944597.html
Copyright © 2011-2022 走看看