数据结构之顺序栈

.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*:可以接受任何类型的数据

本文章参考与“黑马程序员的数据结构课程”,黑马确实有很多不错的课程,适合自学编程的骚年们。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值