06数据结构—栈的顺序存储

思想:

使用固定数组来进行数据存储,交给结构体管理。栈的插入与删除都只能在栈顶操作。

栈特点:

先进后出,内存连续存储单元,增删等操作在栈顶进行。

代码实现:

.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;
}

运行效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值