c++实现栈的两种存储
1、栈的特点:
-
栈可以看成是一个弹夹,先压进去的子弹,先被打出来,即先进后出
-
栈的结构如下:

-
栈有两种存储方式:一种是顺序存储(用数组实现)一种是链式存储结构(用链表实现)
2、顺序存储结构:
-
栈的定义:
const int maxsize = 1024;//定义栈的最大容量为1024
class stack
{
public:
void* data[maxsize];//由于不知道存入的数据为何类型,用void类型代替,后期注意void定义的空指针的数据调用
int size;
};
-
栈的初始化
//栈的初始化
stack* stack_init()
{
stack* st = new stack;
for (int i = 0; i < maxsize; i++)//初始化的时候一定要将数组中的元素一个一个初始化
{
st->data[i] = NULL;
}
st->size = 0;
return st;
}
-
栈的入栈操作
//入栈操作
void stack_push(stack* st,void *data)
{
if (st->size == maxsize)
{
cout << "栈已满,无法进行入栈" << endl;
}
st->data[st->size] = data;
st->size++;
}
-
栈的出栈操作
//出栈操作
void stack_pop(stack* st) { if (st->size == 0) { cout << "栈已满,无法出栈" << endl; } st->size--;//逻辑上将实际数量减少一个 }
-
打印栈的每一个数据
void stack_print(stack* st)
{
for (int i = 0; i < st->size; i++)
{
//这里的*(int*)(st->data[i])是因为void类型的数据调用的时候需要强转成需要的类型
cout << "第" << i + 1 << "个元素是:" << *(int*)(st->data[i]) << endl;
}
}
-
栈的相关操作
int main() { stack* st = stack_init(); int num[] = {1,2,3,4,5,6,7,8,9}; for (int i = 0; i < 9; i++) { stack_push(st, &num[i]); } stack_print(st); stack_pop(st);//出栈一个元素 stack_print(st); system("pause"); return 0; }
2、一个类之内实现链表:
#include<iostream> using namespace std; class mystack { public: int data[100]; int pos; mystack() { for (int i = 0; i < 100; i++) { this->data[i] = 0; } this->pos = 0; }//初始化操作 void push(int val) { this->data[this->pos] = val; this->pos++; }//进栈操作 void pop() { this->pos--; }//出栈操作 void printstack() { for (int i = 0; i < pos; i++) { cout << data[i] << " "; } } }; int main() { mystack st; st.push(10); st.push(15); st.printstack(); system("pause"); return 0; }
3、栈的链式存储
所谓栈的链式结构就是把链表的调出接口只写栈的先进后出的实现

浙公网安备 33010602011771号