知识点:栈,栈是一种C数据结构,是一种只能在表尾进行增删操作的线性表,特点是后进入的数据先出来,最先进入的数据最后出来,就像桶装薯片一样。
例题:http://acm.hdu.edu.cn/showproblem.php?pid=1702
解法:这道题既可以用数组来解,又可以用栈与队列解。
分析:若通过数组解答,此题定义了不少变量,嵌套了多次,注意变量的作用域,第16行定义的字符数组占用空间很小却能每次都存进INorOUT,还避免了初始化和寻址的麻烦。定义了i,index,j三个作为数组的下标这是因为在处理过程中,需要记录存入的数据,需要用下标来判断,还要实现两种输出所以定义三个能尽量避免混淆。程序第22、30、44、53都是i=index;这是因为在i用于判断输出时应不应该输出None,但注意i必须实时更新。最后不要忘了第61行的n--;
题解(数组):
1 #include <stdio.h> 2 #include <string.h> 3 int main() 4 { 5 int ncircle; 6 scanf("%d",&ncircle); 7 while(ncircle--) 8 { 9 int n,i=0,numArray[10000]={0},index=0,j=0; 10 char FL[5]; 11 scanf("%d %s",&n,FL); 12 while(n) 13 { 14 if(!strcmp(FL,"FILO")) 15 { 16 char INOUT[4]; 17 scanf("%s",INOUT); 18 if(!strcmp(INOUT,"IN")) 19 { 20 scanf("%d",&numArray[index]); 21 index++; 22 i=index; 23 } 24 else 25 { 26 if(i>0) 27 { 28 printf("%d\n",numArray[i-1]); 29 index--; 30 i=index; 31 } 32 else 33 printf("None\n"); 34 } 35 } 36 else 37 { 38 char INOUT[4]; 39 scanf("%s",INOUT); 40 if(!strcmp(INOUT,"IN")) 41 { 42 scanf("%d",&numArray[index]); 43 index++; 44 i=index; 45 } 46 else 47 { 48 if(i>0) 49 { 50 printf("%d\n",numArray[j]); 51 j++; 52 index--; 53 i=index; 54 } 55 else 56 { 57 printf("None\n"); 58 } 59 } 60 } 61 n--; 62 } 63 } 64 return 0; 65 }