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、栈的链式存储
所谓栈的链式结构就是把链表的调出接口只写栈的先进后出的实现
 
posted @ 2022-09-04 09:08  铜锣湾陈昊男  阅读(20)  评论(0)    收藏  举报