#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int Elemtype;
typedef struct Node {
Node *lNext;
Elemtype eData;
} *LinkedStack;
//函数声明
LinkedStack initNode();
void showStack(LinkedStack);
void initStack(LinkedStack , int);
int stackLength(LinkedStack);
bool isEmptyStack(LinkedStack);
Elemtype getTop(LinkedStack);
void push(LinkedStack , Elemtype);
Elemtype pop(LinkedStack);
void clearStack(LinkedStack);
int main()
{
LinkedStack ls = initNode();
cout << "输入要初始化栈空间的元素个数:" << endl;
int iSize;
cin >> iSize;
cout << "输入各个元素值:" << endl;
initStack(ls , iSize);
cout << "栈内元素有:" << endl;
showStack(ls);
//测试求栈空间元素个数函数
//cout << "栈空间元素个数为:" << stackLength(ls) << endl;
//判断栈空间是否为空
/*bool bEmpty = isEmptyStack(ls);
if(bEmpty) {
cout << "栈空间里面没有任何元素!" << endl;
} else {
cout << "栈非空!" << endl;
}*/
//测试获取栈顶元素
/*Elemtype eReturn = getTop(ls);
cout << "栈顶元素为:" << eReturn << endl;*/
//测试入栈函数
/*Elemtype eValue;
cout << "输入要入栈的元素值:" << endl;
cin >> eValue;
push(ls , eValue);
cout << "入栈后,栈空间元素值为:" << endl;
showStack(ls);*/
//测试出栈函数
Elemtype eDelete = pop(ls);
cout << "被删除元素为:" << eDelete << endl;
cout << "栈空间剩余元素:" << endl;
showStack(ls);
//测试置空栈
cout << "置空栈……" << endl;
clearStack(ls);
showStack(ls);
return 0;
}
//初始化结点
LinkedStack initNode() {
LinkedStack lReturn = (LinkedStack)malloc(sizeof(Node));
lReturn->lNext = NULL;
return lReturn;
}
//初始化栈
void initStack(LinkedStack lHead , int iSize) {
if(lHead->lNext != NULL) {
lHead->lNext = NULL;
}
for(int i = 0; i < iSize; i++) {
Elemtype eValue;
cin >> eValue;
push(lHead , eValue);
}
}
//求栈空间元素个数
int stackLength(LinkedStack lHead) {
int length = 0;
while(lHead->lNext != NULL) {
length++;
lHead = lHead->lNext;
}
return length;
}
//显示栈空间所有值
void showStack(LinkedStack lHead) {
if(isEmptyStack(lHead)) {
cout << "栈空间里面没有元素!" << endl;
return;
}
lHead = lHead->lNext;
while(lHead != NULL) {
cout << lHead->eData << " ";
lHead = lHead->lNext;
}
cout << endl;
}
//判断栈空间是否为空
bool isEmptyStack(LinkedStack lHead) {
if(lHead->lNext == NULL) {
return true;
}
return false;
}
//读取栈顶元素
Elemtype getTop(LinkedStack lHead) {
if(isEmptyStack(lHead)) {
cout << "栈空间没有任何元素!" << endl;
return -1;
}
return lHead->lNext->eData;
}
//入栈
void push(LinkedStack lHead , Elemtype eValue) {
LinkedStack lNew = initNode();
lNew->eData = eValue;
lNew->lNext = lHead->lNext;
lHead->lNext = lNew;
}
//出栈
Elemtype pop(LinkedStack lHead) {
if(isEmptyStack(lHead)) {
cout << "栈空间没有任何元素!" << endl;
return -1;
}
LinkedStack lDelete = lHead->lNext;
lHead->lNext = lDelete->lNext;
Elemtype eReturn = lDelete->eData;
free(lDelete);
return eReturn;
}
//置空栈
void clearStack(LinkedStack lHead) {
if(isEmptyStack(lHead)) {
return;
}
while(!isEmptyStack(lHead)) {
LinkedStack lDelete = lHead->lNext;
lHead->lNext = lDelete->lNext;
free(lDelete);
}
}
//销毁栈
void destoryStack(LinkedStack lHead) {
clearStack(lHead);
free(lHead);
}
分享到:
相关推荐
1.请使用链栈实现通用数制转换程序:将任意一个十进制数转换成p进制的数。(p分别取2,8,16) 2. 假定一个单向循环链表来表示队列(即循环链队),该队列只设一个队尾指针rear,不设队首指针,试编写下列各种运算...
链栈实现源码,分别用C、C++、JAVA实现
//用链栈实现链队列逆置 //Wpl #include "linkstack.h" //将链栈基本操作包括进来 typedef struct node /*定义链队列结点类型*/ { datatype data; struct node *next; }linkqueue; typedef struct /*封装队头指针...
数据结构实验-括号匹配的检验-链栈实现
运用链栈实现进制的转换,是老师布置的课堂作业,对栈和链表的学习有帮助
链栈的实现链栈的实现链栈的实现链栈的实现链栈的实现
链式存储的栈表示和实现源码,包括链栈的初始化、进栈、出栈、取栈顶元素等操作。
本文实例为大家分享了C++利用链栈实现表达式求值的具体代码,供大家参考,具体内容如下 #include typedef int Status; typedef char Cstack; #define OK 1 #define ERROR 0 typedef struct StackNode { Cstack ...
反序输出- 链栈
使用栈解决老鼠迷宫问题 使用“拆墙”法生成迷宫 可以逐步演示,自动演示,用户控制 附带实验报告
C++语言开发的链栈,使用指针开发,初学者可以作为参考
采用C++语言实现利用顺序栈、链栈将10进制数转为2、8、16进制数。 通过本编程实例,可以进一步了解到顺序栈和链栈之间区别和联系,体会两者的异同,进一步加深知识印象,是不错的练习素材哦。
实现插入,创建,删除,等基本操作。 链栈C++源文件 以链式实现栈的算法
数据结构中链栈的实现,C语言在VC6.0下编译通过
用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)用栈实现十进制转换成二进制(c语言)
上面的压缩包里含有源代码和代码思路的介绍PPT。用的是C++(含有少量C)用的是链式栈模板实现的,计算器有良好的用户界面。可以输入表达式,进行加减乘除、乘方、开方、求余等一系列运算,还可进行多次运算。
数据结构-链栈(C语言实现)
压缩包内为栈的工程包;工程包括顺序栈、链栈的类的定义与实现;附适当注释;完全面向对象,类封装;测试类中用(纯)虚函数实现多态。
用堆栈实现中缀表达式转后缀,并计算后缀表达式的结果。