雞蛋棧

雞蛋棧

時間限制:1000 ms  |  內存限制:65535 KB
難度:1
描述

    繼隊列之後,我們又來學習一種新的數據結構——棧。將隊列的頭部封閉後,就構成了棧這種數據結構,原來隊列頭部就是棧底,原來隊列的尾部就是棧頂。棧與隊列的不同就在於棧的底端是封閉的。所以,棧的插入和刪除操作只能在棧的一端進行,即棧頂。棧的插入操作稱爲入棧,刪除操作稱爲出棧。

底________________頂

|

底—————————頂


輸入
第一行輸入一個數T,表示有T組數據
第二行輸入一個數N,表示有N種操作
接下來N行,每行一種操作,push表示將編號爲x的雞蛋放入棧中,pop表示拿走棧頂部的一個雞蛋。
數據輸入保證合法,棧中沒有雞蛋時不考慮出棧操作!
輸出
在N種操作完成以後,再將棧中的雞蛋逐個出棧,按出棧順序打印雞蛋上的編號,兩個編號之間用空格隔開。如果已沒有雞蛋,則輸出"no eggs!"(不包含引號)。
樣例輸入
1
3
push 3
push 2
push 1
樣例輸出

1 2 3

個人理解:這題考慮了棧中兩個基本的操作,一個是在棧頂增加元素用到了push()函數,一個是彈出棧頂元素用到了pop()函數,同時,也應知道棧的特點,後進先出。在這個題目當中,先將棧中雞蛋定義成一個結構體,從而方便對其操作,再通過定義一個數組判斷第二個字符是u還是o從而決定是入棧還是彈出棧頂元素,然後,根據棧中元素非負,如果是0,表示棧中沒有雞蛋,大於0纔可以彈出棧中元素,最後在輸出的時候,注意輸出下標爲0的那個元素。


#include<stdio.h>
#include<string.h>
struct stack
{
	char s[50];
}x[20000],tp;
int main()
{
	int i,t,n;char y[15];
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		int top=0;
		for(i=0;i<n;++i)
		{
			scanf("%s",y);
			if(y[1]=='u')
			{
				scanf("%s",tp.s);
				x[top++]=tp;
			}
			else if(top>0)
			{
				--top;
			}
		}
		if(top==0)
		{
			printf("no eggs!\n");
			continue;
		}
		for(i=top-1;i>0;--i)
		{
			printf("%s ",x[i].s);
		}
		printf("%s\n",x[0].s);
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章