顺序表栈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 <stdlib.h>
#include <stdio.h>
#include <string.h>


//栈的初始化
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 <stdlib.h>
#include <stdio.h>
#include <string.h>


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


posted @   wjwdive  阅读(437)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
历史上的今天:
2018-08-09 iOS中UITableView的一些问题思考
点击右上角即可分享
微信分享提示