反向输出整数序列
- 总时间限制:
- 500000ms
- 内存限制:
- 65535000kB
- 描述
-
输入一个整数序列(非负整数,只含 正整数 和 0 )。序列以-1 结束。要求反向输出这个正整数序列。
- 输入
- 一个整数序列,每个数之间以空格隔开,非负整数,只含 正整数 和 0 。-1 表示输入结束。
- 输出
- 反向输出输入文件中的整数序列。
- 样例输入
-
3 127 64 1991 -1
- 样例输出
-
1991 64 127
#include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 /* 存储空间初始分配量 */ typedef int Status; typedef int SElemType; typedef struct StackNode { SElemType data; struct StackNode *next; }StackNode,*LinkStackPtr; typedef struct { LinkStackPtr top; int count; }LinkStack; Status InitStack(LinkStack *S) { S->top = (LinkStackPtr)malloc(sizeof(StackNode)); if(!S->top) return ERROR; S->top=NULL; S->count=0; return OK; } Status StackEmpty(LinkStack S) { if (S.count==0) return TRUE; else return FALSE; } Status Push(LinkStack *S,SElemType e) { LinkStackPtr s=(LinkStackPtr)malloc(sizeof(StackNode)); s->data=e; s->next=S->top; /* 把当前的栈顶元素赋值给新结点的直接后继*/ S->top=s; /* 将新的结点 s 赋值给栈顶指针 */ S->count++; return OK; } Status Pop(LinkStack *S,SElemType *e) { LinkStackPtr p; if(StackEmpty(*S)) return ERROR; *e=S->top->data; p=S->top; /* 将栈顶结点赋值给 p,见图中③ */ S->top=S->top->next; /* 使得栈顶指针下移一位,指向后一结点 */ free(p); /* 释放结点 p */ S->count--; return OK; } Status visit(SElemType c) { printf("%d ",c); return OK; } Status StackTraverse(LinkStack S) { LinkStackPtr p; p=S.top; while(p) { visit(p->data); p=p->next; } printf("\n"); return OK; } int main() { int m,r; int e; scanf("%d",&m); LinkStack s; InitStack(&s); while(m>=0) { Push(&s,m); scanf("%d",&m); } while(!StackEmpty(s)) { Pop(&s,&e); printf("%d ",e); } return 0; }