/*
* 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语言实现的更多相关文章

  1. 【数据结构】之顺序表(Java语言描述)

    之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中 ...

  2. 【数据结构】之顺序表(C语言描述)

    顺序表是线性表的一种,它将元素存储在一段连续的内存空间中,表中的任意元素都可以通过下标快速的获取到,因此,顺序表适合查询操作频繁的场景,而不适合增删操作频繁的场景. 下面是使用 C语言 编写的顺序表的 ...

  3. 顺序表的C语言实现

    在现实应用中,有两种实现线性表数据元素存储功能的方法,分别是顺序存储结构和链式存储结构.顺序表操作是最简单的操作线性表的方法.下面的代码实现了顺序表的几种简单的操作.代码如下 //start from ...

  4. 五种编程语言解释数据结构与算法——顺序表1(理论与C语言实现)

    1.线性表的分类 2.线性表的定义及其基本操作 2.1.定义:线性表是具有相同类型的n(n>=0)个元素的有序序列,其中n为表长,当n=0时,该表为空表. 2.3.线性表的逻辑结构为: 2.4. ...

  5. C语言实现顺序表(顺序存储结构)

    顺序表(顺序存储结构)及初始化过程详解 顺序表,全名顺序存储结构,是线性表的一种.通过<线性表>一节的学习我们知道,线性表用于存储逻辑关系为"一对一"的数据,顺序表自然 ...

  6. 顺序表 C++ 类模板实现

    顺序表的C++语言描述 基本运算的算法——置空表.求表的长度.取结点.定位运算.插入运算.删除运算.建立顺序表.输出顺序表 #include <iostream>using namespa ...

  7. 数据结构与算法之顺序栈C语言实现

    顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...

  8. 线性表 及Java实现 顺序表、链表、栈、队列

    数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值, ...

  9. C++模板实现动态顺序表(更深层次的深浅拷贝)与基于顺序表的简单栈的实现

    前面介绍的模板有关知识大部分都是用顺序表来举例的,现在我们就专门用模板来实现顺序表,其中的很多操作都和之前没有多大区别,只是有几个比较重要的知识点需要做专门的详解. #pragma once #inc ...

随机推荐

  1. Jquery 控制table中的checkbox 相关选中事件

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. EJS学习(一)之特性、安装、工作原理

    前言 EJS,"E" 代表 "effective",即[高效],EJS 是一套简单的JavaScript模板,EJS 没有如何组织内容的教条:也没有再造一套迭代 ...

  3. 数据绑定-绑定Servlet内置对象

    数据绑定:获取用户提交的参数,绑定到入参的参数中,就叫数据绑定. 绑定Servlet内置对象: 测试:

  4. Vue中自定义指令的使用方法!

    除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍然需要对普通 DOM ...

  5. WPF中关于合并资源字典

    一.本项目中 <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <!--<ResourceD ...

  6. java常用的加密技术

    详见:https://blog.csdn.net/it_beecoder/article/details/71480770 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,大家可以 ...

  7. 记录一次k8s环境尝试过程(初始方案,现在已经做过很多完善,例如普罗米修斯)

    记录一次Team k8s环境搭建过程(初始方案,现在已经做过很多完善,例如普罗米修斯) span::selection, .CodeMirror-line > span > span::s ...

  8. HTTP协议请求过程

    HTTP协议请求过程分析 步骤:用户输入URL,以www.yxh.com为例,获得主机名后,进行DNS域名解析, 首先,浏览器自身会查找自己缓存,没有的话,寻找本机的hosts文件,本机hosts没有 ...

  9. Ceph实战入门之安部署篇

    最近Ceph官方发布了luminous长久支持版,新版本增加了很多有意思的功能,但是入门还是先从部署安装开始. 环境说明 在Win10下安装VMware® Workstation 12 Pro软件,用 ...

  10. Backtracking(一)

    LeetCode中涉及到回溯的题目有通用的解题套路: 46. permutations 这一类回溯题目中的基础中的基础,无重复数字枚举: /* Given a collection of distin ...