zoukankan      html  css  js  c++  java
  • CCI_Q3.5

    本文参考该作者文章当作编程笔记:
    
    作者:Hawstein
    出处:http://hawstein.com/posts/ctci-solutions-contents.html

    Q:

    使用两个栈实现一个队列MyQueue。

    思路:

    一个入栈(ss[0]),另一个(ss[1])将ss[0]弹出的数据压入,这样就可以先进先出(FIFO)了。

    CODE:

     1 #include<stdio.h>
     2 #define N 10    /*栈的长度*/
     3 typedef struct 
     4 {
     5     int s[N];
     6     int top;
     7 }struct_stack;
     8 int ssFull(struct_stack *ss)
     9 {
    10     return ss->top==(N-1);
    11 }
    12 void ssPush(int i,struct_stack *ss)
    13 {
    14     if(ssFull(ss))
    15         return;
    16     ss->s[++ss->top]=i;
    17 }
    18 int ssEmpty(struct_stack *ss)
    19 {
    20     return ss->top==-1;
    21 }
    22 int ssPop(struct_stack *ss)
    23 {
    24     if(ssEmpty(ss))
    25         return -1;
    26     return ss->s[ss->top--];
    27 }
    28 /*如果ss[1]栈为空,需要将栈ss[0]数据弹出,压入栈ss[1]中*/
    29 int queuePop(struct_stack *ss)    
    30 {
    31     if(ssEmpty(ss) && ssEmpty(ss+1))
    32         return -1;
    33     if(ssEmpty(ss+1))
    34     {
    35         while(!ssEmpty(ss))
    36         {
    37             ssPush(ssPop(ss),ss+1);
    38         }
    39     }
    40     return ssPop(ss+1);
    41 }
    42 int main()
    43 {
    44     struct_stack ss[2];
    45     ss[0].top=ss[1].top=-1;
    46     int i;
    47     for(i=0;i<N;++i)    /*向队列中压入10个数据*/
    48     {
    49         ssPush(i,&ss[0]);
    50     }
    51     for(i=0;i<3;++i)    /*队列弹出3个数据*/
    52     {
    53         printf("%d	",queuePop(ss));
    54     }
    55     putchar('
    ');
    56     for(i=0;i<N;++i)    /*再向队列中压入10个数据*/
    57     {
    58         ssPush(N+i,&ss[0]);
    59     }
    60     for(i=0;i<N+3;++i)    /*队列弹出13个数据*/
    61     {
    62         printf("%d	",queuePop(ss));
    63     }
    64     putchar('
    ');
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    mysql_fetch_array()和mysql_fetch_assoc()两个函数的区别
    在vmware workstation7上安装centos5.5的一些问题
    如何在CentOS下安装VMwareTools工具
    ResultSetMetaData类的介绍
    火狐快捷键
    ResultSetMetaData类的介绍
    jstl标签的使用
    e.printStackTrace()介绍
    mysql初学指南
    在SQL server中,怎么区别char跟varchar?
  • 原文地址:https://www.cnblogs.com/jhooon/p/3604637.html
Copyright © 2011-2022 走看看