C语言数组栈实现模板

本文实例为大家分享了C语言数组栈实现模板的具体代码,供大家参考,具体内容如下

SeqStack.h

#pragma once
#define MAX_SIZE 1024

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);  // 销毁栈

SeqStack.cpp 函数实现

#include "SeqStack.h"
#include <stdio.h>
#include <stdlib.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 1;

 return 0;

}

int Size_SeqStack(SeqStack* stack)
{
 if (stack == NULL)
 return -1;

 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);
}

数组栈测试程序

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "SeqStack.h"

typedef struct PERSON
{
 char name[64];
 int age;
}Person;

int main()
{
 SeqStack* stack = Init_SeqStack();  // 创建栈

 Person p1, p2, p3, p4, p5;
 strcpy(p1.name, "aaa");
 strcpy(p2.name, "bbb");
 strcpy(p3.name, "ccc");
 strcpy(p4.name, "ddd");
 strcpy(p5.name, "eee");

 p1.age = 10;
 p2.age = 20;
 p3.age = 30;
 p4.age = 40;
 p5.age = 50;

 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");
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言数组a和&a的区别讲解

    面试经典题目 #include "stdio.h" int main() { int a[5] = { 1,2,3,4,5 }; int *ptr = (int *)(&a + 1); printf("%d,%d", *(a + 1), *(ptr - 1)); /*getchar是用VS编写方便查看输出*/ getchar(); return 0; } 请思考一下上面的输出结果,如果你非常自信了,可以不用往下看 题目剖析 这个题目主要考察&a 和 

  • C语言简单实现快速排序

    快速排序是一种不稳定排序,它的时间复杂度为O(n·lgn),最坏情况为O(n2):空间复杂度为O(n·lgn). 这种排序方式是对于冒泡排序的一种改进,它采用分治模式,将一趟排序的数据分割成独立的两部分,其中一组数据的每个值都小于另一组.每一趟在进行分类的同时实现排序. 其中每一趟的模式通过设置key当基准元素,key的选择可以是数据的第一个,也可以是数据的最后一个.这里以每次选取数据的第一个为例: 具体代码实现: #include<stdio.h> #define N 6 int fun(i

  • C语言实现翻译功能

    本文实例为大家分享了C语言实现翻译功能的具体代码,供大家参考,具体内容如下 #include<stdio.h> #define number 100 struct date { char chinese[30]; char English[30]; }a[number]; void copy(char *str1, char *str2, int counst)//将值赋给trans { int i = 0; if (str2 == ' ' || str2 == '\0') { return;

  • C语言测试n的阶乘和x的n次方

    题目描述 输入一个正数x和一个正整数n,求下列算式的值.要求定义两个调用函数:fact(n)计算n的阶乘:mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double. ×输出保留4位小数. 输入 x n 输出 数列和 样例输入 2.0 3 样例输出 1.3333 答案 /************************************************************************* > File Name: 2.c > Author: &

  • C语言 实现N阶乘的程序代码

    代码如下所示: 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#define N 10 //算N的阶乘int main(){       //数组   1位 1!    int ary[N] = {1, 1};    int i, j;    for (i = 2; i <= N; i++)    {        //各个下标的阶乘,第0位下标是位数,所以从第1位开始        for (j = 1; j <= a

  • C语言实现病例管理系统

    本文实例为大家分享了C语言实现病例管理系统的具体代码,供大家参考,具体内容如下 通过十字交叉链表实现一个病例管理系统,可以查找.删除.更新信息. #include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct hospital_info{ char dise_num[10]; /*病历编号*/ char ke[10]; /*门诊科别*/ char date[11]; /

  • C语言实现简单翻译功能

    本文实例为大家分享了C语言实现翻译功能的具体代码,供大家参考,具体内容如下 题目描述:编写一个程序,依次输入英文与汉语拼音,输入两个" * "表示输入结束,再输入一段英语句子,打印出其对应汉语拼音. 要求:不得使用<string.h>头文件 题目中要求不得使用<string.h>提醒我们使用其中的函数来编写代码,不过函数的实现需要自己来思考,根据自己的需要可以调整原函数的功能.思路大致是:输入完毕后拿原结构体记录的英文内容与 a 中的单词逐个相比,若相同,则输出

  • 利用C语言结构体实现通讯录

    本文实例为大家分享了C语言结构体实现通讯录的具体代码,供大家参考,具体内容如下 用来存储1000个人的信息的通讯录,每个人的信息包括: 姓名.性别.年龄.电话.住址 程序如下: #include<stdio.h> #include<string.h> #include<stdlib.h> struct People { char name[20]; char sex[5]; int age; char tel[15]; char addr[50]; }; //定义人的信

  • C语言实现词法分析器

    问题描述: 用C或C++语言编写一个简单的词法分析程序,扫描C语言小子集的源程序,根据给定的词法规则,识别单词,填写相应的表.如果产生词法错误,则显示错误信息.位置,并试图从错误中恢复.简单的恢复方法是忽略该字符(或单词)重新开始扫描. 相关词法规则 <标识符>::=<字母> <标识符>::=<标识符><字母> <标识符>::=<标识符><数字> <常量>::=<无符号整数> <无

  • 如何写出优美的C语言代码

    面向对象的语言更接近人的思维方式,而且在很大程度上降低了代码的复杂性,同时提高了代码的可读性和可维护性,传统的 C 代码同样可以设计出比较易读,易维护,复杂度较低的优美代码,本文将通过一个实际的例子来说明这一点. 基础知识 结构体 除了提供基本数据类型外,C 语言还提供给用户自己定制数据类型的能力,那就是结构体,在 C 语言中,你可以用结构体来表示任何实体.结构体正是面向对象语言中的类的概念的雏形,比如: typedef struct{ float x; float y; }Point; 定义了

  • C语言实现餐饮点餐管理系统

    本文实例为大家分享了C语言实现餐饮点餐管理系统的具体代码,供大家参考,具体内容如下 具体代码如下 /* 项目名称:南航餐饮管理系统 组员:梁文新,刘青林,刘艺,施瑞文(组长) */ //当注册用户名为:root,密码为:root的账号时,系统默认为初始管理员 //头文件 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h&g

随机推荐