N-49. 栈的模拟

Description

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
   栈是一个非常经典的数据结构。我们可以形象地想象一只桶,这只桶里面的元素是从下至上依次排列的,不存在两个元素在桶里的同一个高度。我们可以从桶的顶部往里面放入一个元素,这个操作称为入栈(push);也可以将其最上面的一个元素拿掉,这个操作称为出栈(pop)。显然,由于最顶上的元素“压着”其他元素,我们不能从栈的其他地方放入或者拿掉一个元素。

   现在,为了更好地理解栈,请你编写一个程序来实现栈的各项操作。

   Tips: 我们可以用数组来模拟栈的实现。声明一个数组stack来存储栈内元素,一个整型变量top来表示栈顶在数组中的位置。

——————————————————————————
学了c++以后就不想做各种模拟数据结构的题,又快不过STL,何必呢?
用数组模拟,pop就把数组长度减一,push就把数组长度加一并读入。

#include <stdio.h>  
#include <string.h>  
#include <math.h>  
int a[3010] = {0}, b[3010] = {0};  
char s[110];  
int main () {  
    int max = -1, cnt = 0;  
    while (scanf("%s", s) != EOF) {  
        if (s[1] == 'o') {  
            if (max >= 0) b[cnt++] = a[max], max --;  
        }  
        else if (s[0] == 's' ) {  
            for (int i = 0; i <= max; i++) {  
            if (i != max) printf("%d ", a[i]);  
            else printf("%d", a[i]);}  
            printf("\n");  
        }  
        else {  
            int ans = 0, k = 0;  
            for (int i = strlen(s); i >= 0; i--) {  
                if (s[i] >= '0' && s[i] <= '9') ans += pow(10, k++) * (s[i] - '0');  
                if (s[i] == '-') ans = -ans;  
            }  
            a[++max] = ans;   
        }  
    }  
    if (max != -1) {  
    for (int i = 0; i < cnt; i++) printf("%d ", b[i]);  
    for (int i = max; i >= 0; i--) {  
        if (i != 0) printf("%d ", a[i]);  
        else printf("%d", a[i]);  
    }  
    printf("\n");}  
    return 0;  
}  
posted @ 2022-05-18 16:21  misasteria  阅读(109)  评论(0编辑  收藏  举报