📄 stack1m.txt
字号:
//顺序栈的类定义stack1.h
class Stack
{private:
DataType *data;
int maxSize;
int top;
public:
//创建空栈
void SetStack(int n);
//栈存在则栈被销毁
void FreeStack();
//栈存在则返回栈的元素个数,即栈的长度
int StackSize();
//判断栈是否为空
bool StackEmpty();
//判断栈是否为满
bool StackFull();
//栈存在且非空则返回栈的栈顶元素
DataType Peek();
//栈存在则插入元素item为新的栈顶元素
void Push(DataType item);
//栈存在且非空则删除栈的栈顶元素并用e返回其值
DataType Pop(DataType e);
//栈存在则清为空栈
void ClearStack();
// 栈的遍历
void StackTraverse(void (*visit)(DataType *));
};
//顺序栈的实现stack1.cpp
//#include "stack1.h"
void Stack::SetStack(int n)
{data=new DataType[n];
if(data==NULL)
{cout<<"overflow!\n";exit(1);}
maxSize=n;
top=-1;
}
void Stack::FreeStack()
{free(data);}
int Stack::StackSize()
{return(top+1);}
bool Stack::StackEmpty()
{if(top==-1) return true;
return false;
}
bool Stack::StackFull()
{if(top==maxSize-1) return true;
return false;
}
DataType Stack::Peek()
{if(top==-1)
{cerr<<"栈已空!\n";exit(1);exit(1);}
return(data[top]);
}
void Stack::Push(DataType item)
{if(top==maxSize-1)
{cerr<<"栈已满!\n";;exit(1);}
top++;
data[top]=item;
}
DataType Stack::Pop(DataType e)
{if(top==-1)
{cerr<<"栈已空!\n";exit(1);}
top--;
return data[top+1];
}
void Stack::ClearStack()
{top=-1;}
void Stack::StackTraverse(void (*visit)(DataType *))
{while(top!=-1){
visit(data);top--;}
}
//顺序栈的测试stack1M.cpp
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
typedef struct STU{
char name[10];
char stuno[10];
int age;
int score;
}DataType;
#include "stack1.h"
#include"stack1.cpp"
void StackPrintElem(DataType *e)
{cout<<"姓名 学号 年龄 成绩\n";
cout<<e->name<<setw(8)<<e->stuno;
cout<<setw(4)<<e->age;
cout<<setw(5)<<e->score<<endl;
}
void main()
{ DataType e;
Stack Sa;//clrscr();
int N=8;
cout<<"stack1M.cpp运行结果:\n";
cout<<"首先调用创建空栈函数!\n";
Sa.SetStack(N);
strcpy(e.name,"stu1");
strcpy(e.stuno,"100001");
e.age=20;
e.score=87;
Sa.Push(e);
cout<<"压栈后现在栈中有一个元素!\n";
StackPrintElem(&Sa.Peek());
if(Sa.StackEmpty()) cout<<"栈Sa空!\n";
else cout<<"栈Sa非空!\n";
strcpy(e.name,"stu3");
strcpy(e.stuno,"100002");
e.age=21;
e.score=90;
Sa.Push(e);
cout<<"现在栈中有二个元素!\n";
StackPrintElem(&Sa.Peek());
cout<<"栈Sa的长度:"<<Sa.StackSize()<<endl;
cout<<"现在将元素e弹出栈!\n";
Sa.Pop(e);
StackPrintElem(&e);
cout<<"栈的剩余元素:\n";
Sa.StackTraverse(StackPrintElem);
if(Sa.StackEmpty()) cout<<"栈Sa为空栈!\n";
else cout<<"栈Sa为非空栈!\n";
getch();}
stack1M.cpp运行结果:
首先调用创建空栈函数!
压栈后现在栈中有一个元素!
姓名 学号 年龄 成绩
stu1 100001 20 87
栈Sa非空!
现在栈中有二个元素!
姓名 学号 年龄 成绩
stu3 100002 21 90
栈Sa的长度:2
现在将元素e弹出栈!
姓名 学号 年龄 成绩
stu3 100002 21 90
栈的剩余元素:
姓名 学号 年龄 成绩
stu1 100001 20 87
栈Sa为空栈!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -