.h文件,相关函数的声明。
#ifndef SEQSTACK_H
#define SEQSTACK_H
#include<stdio.h>
//用数组来模拟栈的顺序存储
#define MAX_SIZE 1024
typedef struct SEQSTACK{
void* data[MAX_SIZE]; //可以存储任意类型,void*
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 Free_SeqStack(SeqStack* stack);
#endif
.c文件,相关函数的实现。
#include"SeqStack.h"
#define SEQSTACK_TRUE 1
#define SEQSTACK_FALSE 0
//初始化栈 返回栈
SeqStack* Init_SeqStack(){
SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack)); //动态申请栈
int i;
for(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 || stack->size == MAX_SIZE || data == NULL){
return;
}
stack->data[stack->size] = data;
stack->size ++;
}
//返回栈顶元素
void* Top_SeqStack(SeqStack* stack){
if(stack == NULL || stack->size == 0){
return NULL;
}
return stack->data[stack->size - 1];
}
//出栈
void Pop_SeqStack(SeqStack* stack){
if(stack == NULL || stack->size == 0){
return;
}
stack->size --; //直接使size减一,将栈顶元素抛出
}
//判断是否为空
int IsEmpty(SeqStack* stack){
if(stack == NULL){
return -1;
}
if(stack->size == 0){
return SEQSTACK_TRUE;
}
return SEQSTACK_FALSE;
}
//返回栈中元素的个数
int Size_SeqStack(SeqStack* stack){
return stack->size;
}
//清空栈
void Clear_SeqStack(SeqStack* stack){
if(stack == NULL){
return;
}
int i;
for(i = 0;i < stack->size; i ++){
stack->data[i] = NULL;
}
}
//销毁
void Free_SeqStack(SeqStack* stack){
if(stack == NULL){
return;
}
free(stack);
}
主函数。
#include <stdio.h>
#include <stdlib.h>
#include"SeqStack.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct PERSON{
char name[64];
int age;
}Person;
int main(int argc, char *argv[]) {
//创建栈
SeqStack* stack = Init_SeqStack();
//创建数据
Person p1 = {"aa",10};
Person p2 = {"bb",20};
Person p3 = {"cc",30};
//入栈
Push_SeqStack(stack,&p1);
Push_SeqStack(stack,&p2);
Push_SeqStack(stack,&p3);
//输出
while(Size_SeqStack(stack) > 0){
Person* person = (Person*)Top_SeqStack(stack);
printf("name: %s age: %d\n",person->name,person->age);
//弹出栈顶元素 如果少了此步骤,将会无限执行
Pop_SeqStack(stack);
}
//销毁
Free_SeqStack(stack);
return 0;
}
特别说明。
typedef struct SEQSTACK{
void* data[MAX_SIZE]; //可以存储任意类型,void*
int size;
}SeqStack;
//SEQSTACK:类型名
//SeqStack:类型变量名
//void*:可以接受任何类型的数据
本文章参考与“黑马程序员的数据结构课程”,黑马确实有很多不错的课程,适合自学编程的骚年们。