openjudge数据结构练习集 反向输出整数序列

反向输出整数序列

总时间限制: 
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;
}

猜你喜欢

转载自blog.csdn.net/beforeevery/article/details/80057205