1647: 栈-基本操作(链式存储,不建议学生做)
金币值:2
定数:11
时间限制:1.000 s
内存限制:128 M
正确:2
提交:4
正确率:50.00% 命题人:
题目描述
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int */
/* 链栈结构 */
typedef struct StackNode {
SElemType data;
struct StackNode *next;
} StackNode,*linkStack;
Status visit(SElemType c) {
printf("%d ",c);
return OK;
}
/* 构造一个空栈S */
void InitStack(linkStack &S) {
__________;
}
/* 把S置为空栈 */
Status ClearStack(linkStack &S) {
linkStack p,q;
p=S;
S=NULL;
while(p) {
_____
}
return OK;
}
/* 若栈S为空栈,则返回TRUE,否则返回FALSE */
Status StackEmpty(linkStack S) {
if (_______)
return TRUE;
return FALSE;
}
/* 返回S的元素个数,即栈的长度 */
int StackLength(linkStack S) {
____________
}
/* 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR */
Status GetTop(linkStack S,SElemType &e) {
if(_______)
return ERROR;
__________;
return OK;
}
/* 插入元素e为新的栈顶元素 */
Status Push(linkStack &S,SElemType e) {
linkStack p=(linkStack)malloc(sizeof(StackNode));
p->data=e;
___________; /* 把当前的栈顶元素赋值给新结点的直接后继 */
___________; /* 将新的结点s赋值给栈顶指针 */
return OK;
}
/* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */
Status Pop(linkStack &S,SElemType &e) {
linkStack p;
if(StackEmpty(S))
return ERROR;
e=S->data;
______; /* 将栈顶结点赋值给p*/
______; /* 使得栈顶指针下移一位,指向后一结点 */
______; /* 释放结点p */
return OK;
}
Status StackTraverse(linkStack S) {
linkStack p;
p=S;
while(____) {
visit(p->data);
_______;
}
printf("\n");
return OK;
}
int main(void) {
int i,n;
linkStack s;
SElemType e;
InitStack(s);
scanf("%d",&n);
for(i=1; i<=n; i++) {
scanf("%d",&e);
Push(s,e);
}
printf("栈中从顶至底元素依次为:");
StackTraverse(s);
Pop(s,e);
printf("弹出的栈顶元素 e=%d\n",e);
printf("栈空否:%d(1:空 0:否)\n",StackEmpty(s));
GetTop(s,e);
printf("栈顶元素 e=%d 栈的长度为%d\n",e,StackLength(s));
ClearStack(s);
printf("清空栈后,栈空否:%d(1:空 0:否)\n",StackEmpty(s));
return 0;
}
输入格式
输入有2行:
第1行:待入栈数据元素个数n
第2行:n个数据元素,以空格间隔
第1行:待入栈数据元素个数n
第2行:n个数据元素,以空格间隔
输出格式
见样例
输入样例 复制
10
1 2 3 4 5 6 7 8 9 10
输出样例 复制
栈中从顶至底元素依次为:10 9 8 7 6 5 4 3 2 1
弹出的栈顶元素 e=10
栈空否:0(1:空 0:否)
栈顶元素 e=9 栈的长度为9
清空栈后,栈空否:1(1:空 0:否)