目的:领会顺序栈的存储结构和掌握顺序栈中各种基本运算算法的设计。
内容:编写一个程序sqstack.cpp,实现顺序栈的各种基本运算(假设顺序表的元素类型 ElemType为char),并在此基础上设计一个程序exp3-1.cpp完成以下功能。
- 初始化栈s。
- 判断栈s是否非空。
- 依次进栈元素a、b、c、d、e。
- 判断栈s是否非空。
- 输出出栈序列。
- 判断栈s是否非空。
- 释放栈。
//计算机 小淇在敲代码 实现顺序栈的各种基本运算的算法 #include<stdio.h> #include<malloc.h> //顺序栈 #define MaxSize 50 typedef char ElemType; char w; typedef struct { ElemType data[MaxSize]; int top; }SqStack; //(1)初始化栈s void InitStack(SqStack* &s) { s=(SqStack*)malloc(sizeof(SqStack)); s->top=-1; } //(2)判断栈s是否非空 bool StackEmpty(SqStack*s) { return(s->top==-1); } //(3)依次进栈元素a、b、c、d、e bool Push(SqStack* &s,ElemType e) { if(s->top==MaxSize-1) return false; s->top++; s->data[s->top]=e; return true; } //(4)判断栈s是否非空 //(5)输出出栈序列 bool Pop(SqStack* &s,ElemType &e) { if(s->top==-1) return false; e=s->data[s->top]; s->top--; return true; } //(6)判断栈s是否非空 //(7)释放栈 void DestroyStack(SqStack* &s) { free(s); } //主函数 int main() { SqStack *s; printf("计算机 小淇在敲代码 \n"); printf("顺序栈的各种基本运算的算法: \n"); printf("(1)初始化栈s \n"); InitStack(s); printf("(2)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空")); printf("(3)依次进栈元素a、b、c、d、e \n"); Push(s,'a'); Push(s,'b'); Push(s,'c'); Push(s,'d'); Push(s,'e'); printf("(4)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空")); printf("(5)输出出栈序列: "); while(!StackEmpty(s)) { Pop(s,w); printf("%c",w); } printf("\n"); printf("(6)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空")); printf("(7)释放栈: \n"); DestroyStack(s); return 0; }