上面是通过数组来实现,与数组相比,链表实现更灵活,更容易增删元素。
单链表实现的核心思想是不断更新栈顶指针,来实现出栈压栈,每一个节点是一个结构体,包含一个value和一个next指针指向下一个元素,初始化时将栈顶指针置为NULL。
#pragma once
using namespace std;
template<class type>
struct listnode
{
type value;
listnode* next;
listnode(type v,listnode* p):value(v),next(p){ }
};
template<class type>
class List_stack
{
listnode<type>* top;
int size = 0;
public:
List_stack();
void Push(type &tp);
void Pop();
bool Empty();
int Size();
void Print();
~List_stack()
{
while (top)
{
listnode<type> * p = top;
top = top->next;
delete p;
}
}
};
template<class type>
bool List_stack<type>::Empty()
{
if (top == NULL)
return true;
else
{
return false;
}
}
template<class type>
List_stack<type>::List_stack()
{
top = NULL;
size = 0;
}
template<class type>
void List_stack<type>::Push(type &tp)
{
listnode<type> *tmp=new listnode<type>(tp,top);
top = tmp;
size++;
}
template<class type>
void List_stack<type>::Pop()
{
if (top == NULL)
{
cout << "为空栈" << endl;
}
else
{
top = top->next;
size--;
}
}
template<class type>
int List_stack<type>::Size()
{
return size;
}
template<class type>
void List_stack<type>::Print()
{
listnode<type>* tmp = top;
while (tmp != NULL)
{
cout << tmp->value << 't';
tmp = tmp->next;
}
}
简单测试:
int main()
{
List_stack<int> ls;
for (int i = 0; i < 5; i++)
ls.Push(i);
ls.Print();
ls.Pop();
ls.Pop();
cout << endl;
ls.Print();
cout << endl;
cout << ls.Size();
system("pause");
return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。










