#include<iostream>
using namespace std;
#define DataType int
typedef class Node //链式栈可以视为有限制条件的单链表
{
public:
DataType data;
Node *next;
}Node; //节点结构对于用户是不可见的
typedef class
{
Node *top = NULL; //栈顶指针
public:
void push(DataType data);
DataType pop();
bool empty();
int length();
DataType gettop();
}stack;
void stack::push(DataType data)
{
//和顺序栈不一样的是,链式栈不需要检查溢出问题
//创建新Node
Node *node;
node = (Node*)malloc(sizeof(Node));
node->data = data;
//将node插入链头
node->next = stack::top;
stack::top = node;
cout<<data<<" 入栈."<<endl;
}
DataType stack::pop()
{
if(stack::top == NULL) //检查栈是否为空
{
cout<<"出栈失败(栈空!)"<<endl;
return -1;
}
Node *Temp = stack::top;
stack::top = Temp->next;
DataType pop_data = Temp->data;
free(Temp);
cout<<pop_data<<" 出栈."<<endl;
return pop_data;
}
bool stack::empty()
{
if(stack::top == NULL)
{
cout<<"栈检查:空!"<<endl;
return true;
}
cout<<"栈检查:非空!"<<endl;
return false;
}
int stack::length()
{
int num = 0;
Node *Temp = stack::top;
while(Temp!=NULL)
{
Temp = Temp->next;
num++;
}
cout<<"栈检查:数据个数为"<<num<<endl;
return num;
}
DataType stack::gettop()
{
if(stack::top==NULL)
{
cout<<"读取栈顶元素失败(栈空!)"<<endl;
return -1;
}
DataType top_num = stack::top->data;
cout<<"栈顶元素为:"<<top_num<<endl;
return top_num;
}
int main()
{
stack s1;
s1.push(1);
s1.push(2);
s1.push(3);
s1.push(4);
s1.push(5);
s1.length();
s1.pop();
s1.pop();
s1.pop();
s1.gettop();
s1.pop();
s1.pop();
s1.pop();
s1.empty();
}
栈之链式栈 C++代码实验
最新推荐文章于 2021-09-01 15:04:26 发布