/*
* 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. 数据库oracle行列的操作(MiTAC)

    1.两个重要的网址(参考): http://lovejuan1314.iteye.com/blog/413694http://www.cnblogs.com/heekui/archive/2009/0 ...

  2. JS基础_字面量和变量

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. O008、LVM类型的Storage Pool

    参考https://www.cnblogs.com/CloudMan6/p/5277927.html   LVM类型的Storage Pool   不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上  ...

  4. 误删除/dec/zero,/dev/null

    误删除/dev/zero [root@MYSQL-MONGO145 dev]# mknod /dev/zero c 1 5[root@MYSQL-MONGO145 dev]# chmod 666 /d ...

  5. JS代码格式化

    JS代码格式化也就是规范化,保留必要的换行和缩进使代码阅读起来更容易.团队协同工作时会有相应的标准,大家要保证统一的代码风格,这样在合并代码的时候才不容易出问题.通过快捷键Ctrl+Shift+F进行 ...

  6. Nginx配置,请求到tomcat中

    一.web服务器分为两类 1.web服务器 1)Apache服务器 2)Nginx 3)IIS 2.web 应用服务器 1)tomcat 2)resin 3)jetty 区分:web服务器不能解析js ...

  7. CentOS7 SVN基本配置

    开机自启指令如下 systemctl enable svnserve.service 对应可执行脚本文件路径 vim /etc/sysconfig/svnserve 查看状态: ps -ef|grep ...

  8. KVM和Docker的对比

    虚拟化技术对比: KVM:全虚拟化,需要模拟各种硬件 docker:严格来说不算是虚拟化技术,只是进程隔离和资源限制 实例启动进程对比: 在kvm虚拟机中执行top命令,看宿主机进程树,根本看不到to ...

  9. Dubbo 03 Restful风格的API

    目录 Dubbo03 restful风格的API 根路径 协议 版本 用HTTP协议里的动词来实现资源的增删改查 用例 swagger(丝袜哥) OpenAPI 资源 编写API文档 整合Spring ...

  10. 08Request

    1.request对象和response对象的原理 1. request和response对象是由服务器创建的.我们来使用它们 2. request对象是来获取请求消息,response对象是来设置响 ...