使用顺序表实现栈的c语言程序,顺序表栈C语言实现

/*

* SeqStack.h

*

* Created on: 2019年8月1日

* Author: Administrator

*/

#ifndef SEQSTACK_H_

#define SEQSTACK_H_

//数组去模拟栈的顺序存储, 有数组的后面模拟栈顶 ,避免数据频繁移动

#define MAX_SIZE 1024

#define SEQ_STACK_TRUE 1

#define SEQ_STACK_FALSE 0

typedef struct SEQSTACK {

void *data[MAX_SIZE];

int size;

} SeqStack;

//栈的初始化

SeqStack *Init_SeqStack();

//入栈

void Push_SeqStack(SeqStack *stack, void *data);

//返回栈顶元素

void *Top_SeqStack(SeqStack *stack);

//出栈

void Pop_SeqStack(SeqStack *stack);

//判断是否为空

int IsEmpty(SeqStack *stack);

//返回栈中元素个数

int Size_SeqStack(SeqStack *stack);

//清空栈

void Clear_SeqStack(SeqStack *stack);

//销毁

void FreeSpace_SeqStack(SeqStack *stack);

#endif /* SEQSTACK_H_ */

/*

* SeqStack.c

*

* Created on: 2019年8月1日

* Author: Administrator

*/

#include "SeqStack.h"

#include

#include

#include

//栈的初始化

SeqStack *Init_SeqStack() {

SeqStack *stack = (SeqStack *)malloc(sizeof(SeqStack));

for(int i = 0; i < MAX_SIZE; i++){

stack->data[i] = NULL;

}

stack->size = 0;

return stack;

}

//入栈

void Push_SeqStack(SeqStack *stack, void *data) {

if(stack == NULL){

return;

}

if(stack->size == MAX_SIZE) {

return;

}

if(data == NULL){

return;

}

stack->data[stack->size] = data;

stack->size++;

}

//返回栈顶元素

void *Top_SeqStack(SeqStack *stack) {

if(stack == NULL){

return NULL;

}

if(stack->size == 0){

return NULL;

}

return stack->data[stack->size-1];

}

//出栈

void Pop_SeqStack(SeqStack *stack) {

if(stack == NULL){

return;

}

if(stack->size == 0){

return;

}

stack->data[stack->size-1] = NULL;

stack->size--;

}

//判断是否为空

int IsEmpty(SeqStack *stack) {

if(stack == NULL){

return -1;

}

if(stack->size == 0){

return SEQ_STACK_TRUE;

}

return SEQ_STACK_FALSE;

}

//返回栈中元素个数

int Size_SeqStack(SeqStack *stack) {

return stack->size;

}

//清空栈

void Clear_SeqStack(SeqStack *stack) {

if(stack == NULL){

return;

}

for(int i = 0;i < stack->size; i++){

stack->data[i] = NULL;

}

stack->size = 0;

}

void FreeSpace_SeqStack(SeqStack *stack){

if(stack == NULL){

return;

}

free(stack);

}

/*

* main.c

*

* Created on: 2019年8月1日

* Author: Administrator

*/

#include "SeqStack.h"

#include

#include

#include

typedef struct PERSON {

char name[64];

int age;

} Person;

int main(){

printf("栈 \n");

//创建栈

SeqStack *stack = Init_SeqStack();

//创建数据

Person p1 = {"Jarvis1", 11};

Person p2 = {"Jarvis2", 12};

Person p3 = {"Jarvis3", 13};

Person p4 = {"Jarvis4", 14};

Person p5 = {"Jarvis5", 15};

//入栈

Push_SeqStack(stack, &p1);

Push_SeqStack(stack, &p2);

Push_SeqStack(stack, &p3);

Push_SeqStack(stack, &p4);

Push_SeqStack(stack, &p5);

//输出

while(Size_SeqStack(stack) > 0) {

//访问栈顶元素

Person *person = (Person *)Top_SeqStack(stack);

printf("Name: %s, Age: %d \n", person->name, person->age);

//弹出栈顶元素

Pop_SeqStack(stack);

}

//释放内存

FreeSpace_SeqStack(stack);

system("pause");

return 0;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值