思想:
使用固定数组来进行数据存储,交给结构体管理。栈的插入与删除都只能在栈顶操作。
栈特点:
先进后出,内存连续存储单元,增删等操作在栈顶进行。
代码实现:
.h头文件
#pragma once
#include <iostream>
using namespace std;
#define MAX_SIZE 10
//栈:
//特点:先进后出,内存连续存储单元,增删等操作在栈顶进行
//定义一个结构体,进行函数管理
typedef struct setStack {
void* data[MAX_SIZE];//利用数组进行数据元素操作
int size;
}stack;
//初始化
stack* init_Stack();
//插入
void push_Stack(stack* sta,void *data);
//删除
void pop_Stack(stack* sta);
//返回栈顶元素
void* top_stack(stack* sta);
//返回栈大小
int Size_stack(stack* sta);
//摧毁内存
void free_satck(stack *sta);
//清空栈
void Clear_Stack(stack *sta);
.cpp文件
#include "seqstack.h"
stack* init_Stack()
{
stack* sta = (stack*)malloc(sizeof(stack));//结构体分配空间
//初始化
sta->size = 0;
for (int i = 0;i<MAX_SIZE;i++) {
sta->data[i] = NULL;
}
return sta;
}
void push_Stack(stack* sta, void* data)
{
if (sta == NULL) {
return;
}
if (data == NULL) {
return;
}
sta->data[sta->size] = data;
sta->size++;
}
void pop_Stack(stack* sta)
{
if (sta == NULL) {
return;
}
sta->data[sta->size] = NULL;
sta->size--;
}
void* top_stack(stack* sta)
{
return sta->data[sta->size-1];
}
int Size_stack(stack* sta)
{
if (sta == NULL) {
return -1;
}
return sta->size;
}
void free_satck(stack* sta)
{
if (sta == NULL) {
return;
}
free(sta);
}
void Clear_Stack(stack* sta)
{
sta->size = 0;
}
主函数测试文件
#include "seqstack.h"
typedef struct student {
char name[20];
int score;
}stu;
int main() {
stu s1 = {"asa",24};
stu s2 = { "sd",25};
stu s3 = { "sdf",23};
stack * sta= init_Stack();
push_Stack(sta,(stu*)&s1);
push_Stack(sta,(stu*)&s2);
push_Stack(sta,(stu*)&s2);
cout<<"栈的大小为:"<<Size_stack(sta) << endl;
while (sta->size!=0) {
stu* s = (stu*)top_stack(sta);//返回结构体的数组数据元素,强制转化为自定义类型
cout << "name: " << s->name << " score: " << s->score << endl;
pop_Stack(sta);
}
cout << "栈的大小为:" << Size_stack(sta) << endl;
return 0;
}