顺序表栈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 @ 2019-08-09 07:48  wjwdive  阅读(425)  评论(0编辑  收藏  举报