⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack1m.txt

📁 C++描述的数据结构内容,在C++builder的环境中运行,这是第一部分
💻 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 + -