数据结构--链栈

一.存储结构

数据结构--链栈

struct Node
{
  DataType data;
  Node<DataType>*next;
};

 二.操作集合

1.构造函数

LinkStack<DataType>::LinkStack()
{
   top=new Node<DataType>;
   top->next=nullptr;
}

2.析构函数

LinkStack<DataType>::~LinkStack()
{
  Node<DataType>*q=nullptr;
  while(top!=nullptr)
{
  q=top;
  top=top->next;
  delete q;
}
}

3.入栈操作 

数据结构--链栈

void LinkStack<DataType>::Push(DataType x)
{
  Node<DataType>*s=nullptr;
  s=new Node<DataType>;
  s->data=x;
  s->next=top;
  top=s;
}

4.出栈操作

数据结构--链栈

DataType LinkStack<DataType>::Pop()
{
  Node<DataType>*p=nullptr;
  DataType x;
  if(top==nullptr)  cout<<"下溢";
  x=top->data;
  p=top;
  top=top->next;
  delete p;
  return x;
}

5.取栈顶

DataType LinkStack<DataType>::GetTop()
{   
  DataType x;
  x=top->data;
  return x;
}

6.置空栈

void LinkStack<DataType>::MakeEmpty()
{
   Node<DataType>*p;
   while(top!=nullptr)
{
   p=top;
   top=top->next;
   delete p;
}
}

三.完整程序

#include<iostream>
using namespace std;
template<typename DataType>
struct Node
{
  DataType data;
  Node<DataType>*next;
};
template<typename DataType>
class LinkStack
{
public:	
  LinkStack();
  ~LinkStack();
  void Push(DataType x);
  DataType Pop();
  DataType GetTop();
  int Empty();
  void MakeEmpty();
  int getsize();
private:
  Node<DataType>*top;
};
template<typename DataType>
LinkStack<DataType>::LinkStack()
{
  top=new Node<DataType>;
  top->next=nullptr;
}
template<typename DataType>
LinkStack<DataType>::~LinkStack()
{
  Node<DataType>*q=nullptr;
  while(top!=nullptr)
{
  q=top;
  top=top->next;
  delete q;
}
}
template<typename DataType>
void LinkStack<DataType>::Push(DataType x)
{
  Node<DataType>*s=nullptr;
  s=new Node<DataType>;
  s->data=x;
  s->next=top;
  top=s;
}
template<typename DataType>
DataType LinkStack<DataType>::Pop()
{
  Node<DataType>*p=nullptr;
  DataType x;
  if(top==nullptr)  cout<<"下溢";
  x=top->data;
  p=top;
  top=top->next;
  delete p;
  return x;
}
template<typename DataType>
DataType LinkStack<DataType>::GetTop()
{ 
  DataType x;
  x=top->data;
  return x;
}
template<typename DataType>
int LinkStack<DataType>::getsize()
{
   Node<DataType>*p=top;  int k=0;
   while(top!=nullptr)
{
   top=top->next;
   k++;
}
   return k;
}
template<typename DataType>
void LinkStack<DataType>::MakeEmpty()
{
   Node<DataType>*p;
   while(top!=nullptr)
{
    p=top;
    top=top->next;
    delete p;
}
}
int main()
{
  int x;
  LinkStack<int>S;
  cout<<"对15和10进行入栈操作";
  S.Push(15); S.Push(10);
  cout<<"当前栈顶元素为:"<<S.GetTop()<<endl;
  x=S.Pop();
  cout<<"执行一次出栈操作,删除元素:"<<x<<endl; 
  cout<<"请输入待插入元素:";
  cin>>x;	 
  S.Push(x);
  cout<<"栈*有元素:"<<endl;
  cout<<S.getsize()<<endl;
  cout<<"清空栈"<<endl;
  S.MakeEmpty();
  return 0;	
}

参考文献:

《数据结构——从概念到C++实现》(第三版)王红梅主编  清华大学出版社

上一篇:如何防止员工删除电脑文件 商业机密防删除攻略


下一篇:数据结构阶段二(2)