数据结构——栈的类定义和实现


#include<iostream>
#include<iomanip>
#include<string>
#include<stdlib.h> //使用库函数exit()
using namespace std;

template<class Type>
class Stack{
private:
Type*data; //栈元素数组
int maxSize; //最大栈顶值
int top; //栈顶
public:
void setStack(int n) /*创建空栈*/
{
data=new Type[n];
if(data==NULL)
{
cout<<"overflow!"<<endl;
exit(1);
}
maxSize=n;
top=-1;
}

void freeStack() /*销毁栈*/
{
free(data);
}

int stackSize() /*栈的长度*/
{
return (top+1);
}

bool isEmpty() /*判断栈是否为空*/
{
if(top==-1)
return true;
return false;
}

bool isFull() /*判断栈是否为满*/
{
if(top==maxSize-1)
return true;
return false;
}

Type Peek() /*栈存在且非空则返回栈顶元素*/
{
if(top==-1)
{
cerr<<"栈空!"<<endl;
exit(1);
exit(1);
}
return (data[top]);
}

void Push(Type item)/*入栈*/
{
if(top==maxSize-1)
{
cerr<<"栈满!"<<endl;
exit(1);
}
top++;
data[top]=item;
}

Type Pop(Type e) /*栈非空则删除栈顶元素并用e返回其值*/
{
if(top==-1)
{
cerr<<"栈空!"<<endl;
exit(1);
}
top--;
return data[top+1];
}
void clearStack() /*清空栈*/
{
top=-1;
}

void stackTraverse(void (*visit)(Type*)) /*遍历栈,形参visit为函数指针(指向函数的指针变量)*/
{
while(top!=-1)
{
visit(data);
top--;
}

}
};

/*测试*/
typedef struct Stu{
char name[10];
char stu_num[10];
int age;
int score;
}Type;

void StackPrintElem(Type*e) /*输出栈中元素*/
{
cout<<"姓名 学号 年龄 成绩:"<<endl;
cout<<e->name<<setw(8)<<e->stu_num;
cout<<setw(4)<<e->age;
cout<<setw(5)<<e->score<<endl;
}

void main()
{
Type e;
Stack<Type> S;
int n=8;

S.setStack(n);

cout<<"压栈第一个元素:"<<endl;
strcpy(e.name,"stu1");
strcpy(e.stu_num,"100001");
e.age=20;
e.score=87;
S.Push(e);
StackPrintElem(&S.Peek());
cout<<endl;

if(S.isEmpty())
cout<<"栈S空!"<<endl;
else
cout<<"栈S非空!"<<endl;
cout<<endl;

cout<<"压入第二个元素:"<<endl;
strcpy(e.name,"stu3");
strcpy(e.stu_num,"100002");
e.age=21;
e.score=90;
S.Push(e);
StackPrintElem(&S.Peek());
cout<<endl;

cout<<"现在栈S的长度:"<<S.stackSize()<<endl<<endl;
cout<<"将元素e弹出栈!"<<endl;
S.Pop(e);
StackPrintElem(&e);
cout<<endl;

cout<<"栈的剩余元素:"<<endl;
S.stackTraverse(StackPrintElem);
cout<<endl;

if(S.isEmpty())
cout<<"栈S为空!"<<endl;
else
cout<<"栈S非空!"<<endl;
cin.get();
}

数据结构——栈的类定义和实现

时间: 2024-10-08 19:53:07

数据结构——栈的类定义和实现的相关文章

数据结构-单链表-类定义2-C++

上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据结构中将c++的语言特点表现出来.一开始也是不愿意读c++的数据结构,只是一种挑战心里,不想读着读着感觉自己太low了,c++的内容更加丰富,所以还得多多练习...... 头文件 1 #ifndef LIST_H 2 #define LIST_H 3 #include <iostream> 4 5

数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决

[本文谢绝转载原文来自http://990487026.blog.51cto.com] 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现 C++ 顺序存储模板类的实现[面试重要] C++ 链式存储模板类的实现[面试重要] C++ 链式存储模板类,载入指针 c++ 栈的链式存储实现(模板类嵌套模板类),编译问题教训[重要] C++ 顺序存储模板类的实现[面试重要] 项目文件: [email protected]://990487026.blog.51cto.com~/c++$ tree .

4、蛤蟆的数据结构笔记之四栈和队列定义

4.蛤蟆的数据结构笔记之四栈和队列定义 本篇名言:"人生应该如蜡烛一样,从顶燃到底,一直都是光明的." 今天学习栈和队列了.从第二篇学习时候我们知道,其实也是线性表的一种. 我们先来看下定义. 欢迎转载,转载请标明出处: 1.  栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称

基本数据结构-栈的实现及其运用

概述:数据结构是用来实现动态集合的方式.动态集合有两个要素,一是动态集合中的元素,二是动态集合上的操作如search(s,k):其中s为给定的集合,k为所要查询的关键字.Insert(s,k),delete,maximun,minimum,successor,predecessor等. 这里介绍几种简单的数据结构:栈,队列,链表,有根树. 一.栈 栈有一定限制的表,元素的插入和删除只能在表头进行,栈虽然缺少鲁棒性,但是更有效,并且很容易应用,栈后进先出.基本的操作包括进栈PUSH,出栈pop,判

数据结构——栈和队列相关算法实现

数据结构栈和队列的基本算法实现 限定性线性表--栈 栈的定义 栈作为一种限定性的线性表,是将线性表的插入和删除操作限制为仅在表的一端进行. 基本算法演示 /* 栈的常见操作: 1.初始化栈 2.元素进栈 3.元素出栈 4.栈的遍历 5.判断栈是否为空栈 6.清空整个栈 */ # include <stdio.h> # include <stdlib.h> typedef struct Node { int date; struct Node * pNext; }NODE,* PNO

数据结构 -- 栈(Stack)

一.栈的简介 定义 栈(英语:stack)又称为堆栈或堆叠,栈作为一种数据结构,它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来). 由于堆叠数据结构只允许在一端进行操作,因而按照后进先出(LIFO == Last In First Out)的原理运作.栈也称为后进先出表 栈的应用场景 undo操作(撤销) 例如:将操作的每组数据存入栈中,如果想要撤销,只需要弹出栈顶元素,就可以恢复上一步操作了. 程序调用的系

南阳OJ-2 括号配对 (数据结构-栈的应用)

括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0<N<=100),表示有N组测试数据.后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组.数据保证S中只含有"[","]","(",")"四种字符 输出 每组输入数据的输出占一行,

poj 2082 Terrible Sets (数据结构 ——栈 STL)

 Terrible Sets Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 2999   Accepted: 1549 Description Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all real numbers. wi, hi for i = 1 . . . n are some elem

C数据结构-栈和队列,括号匹配举例

1.栈和队列是两种特殊的线性表 运算操作被限定只能在表的一端或两端插入,删除元素,故也称它们为限定的线性表结构 2.栈的基本运算 1).Stackinit(&s) 构造一个空栈 2).Stackempty(s) 判断s是否为空栈,当s为空栈时,函数返回值1 否则 0 3).Push(&s,x)  在栈s 的顶部插入元素x,简称将x入 栈 4).Pop(&s,&x) 在栈s 中删除顶元并将其值保存在x单元中返回,简称将x出栈 5)Gettop(s,&x)  读s栈中的