顺序表栈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;
}
顺序表栈C语言实现的更多相关文章
- 【数据结构】之顺序表(Java语言描述)
之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...
- 【数据结构】之顺序表(C语言描述)
顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...
- 顺序表的C语言实现
在现实应用中,有两种实现线性表数据元素存储功能的方法,分别是顺序存储结构和链式存储结构.顺序表操作是最简单的操作线性表的方法.下面的代码实现了顺序表的几种简单的操作.代码如下 //start from ...
- 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)
1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...
- C语言实现顺序表(顺序存储结构)
顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...
- 顺序表 C++ 类模板实现
顺序表的C++语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立顺序表.输出顺序表 #include <iostream>using namespa ...
- 数据结构与算法之顺序栈C语言实现
顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...
- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...
- C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现
前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...
随机推荐
- oa_mvc_easyui_详细页(5)
1.表格详细列中添加a标签,给id参数 <a href="javascript:void(0)" class="details" ids="@n ...
- centos配置mutt和msmtp发送邮件
一.安装mutt yum install mutt -y 二.配置mutt vim /etc/Muttrc 在里面找到下面几行,并将内容修改为你自己的内容(下面几行分布在不同位置,请耐心查找,记得去掉 ...
- CentOS7部署ntp服务器
主机 角色 192.168.48.128 Server 192.168.48.129 Client 192.168.48.130 Client 所有主机安装ntp服务 yum install -y n ...
- echarts图表数据信息动态获取
第一步准备一个json文件echarts.json(名字无所谓),用来模拟从后台获取数据 { "name":["直达","营销广告",&qu ...
- SecureCRT 连接 Centos7.0 (桥接模式),且能连接公网。
1.查看本地网络信息 ip:172.20.10.7 2.在VMware下配置Centos为桥接模式: 3.在Centos命令行输入 ip addr 查看Centos的mac地址 网口:eno16777 ...
- Linux: df du
df :列出文件系统的整体磁盘使用量 du :评估文件系统的磁盘使用量(常用在推估目录所占容量) 1 df :[-ahikHTm] 目录或文件名 选项或参数: -a: 列出所有的文件系统,包括系统 ...
- java8学习之Collector同一性与结合性分析
继续沿着上一次[http://www.cnblogs.com/webor2006/p/8311074.html]Collector接口的javadoc进行阅读,在继续阅读之前,其中有个比较难理解的地方 ...
- uestc summer training #9 牛客第三场 BFS计数
G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...
- win redis安装
一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网以及没有下载地址,只能在github上下载,官网只提供linux版本的下载 官网下载地址 ...
- 使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC + Mybatis的Web项目 (零配置文件)
前言: 除了mybatis 不是零配置,有些还是有xml的配置文件在里面的. 注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration ...