纯c语言模拟栈(初学必看)

编程入门 行业动态 更新时间:2024-10-18 16:48:08

纯c语言模拟栈(初学<a href=https://www.elefans.com/category/jswz/34/1769817.html style=必看)"/>

纯c语言模拟栈(初学必看)

1.栈的概念及其结构

栈是一种特殊的线性表,在栈这个结构里,越先存进去的数据越难取出来。

这个结构就像是一个只有一端有打开的容器,越先放进去的球越在底部,想要把底部的球拿出来,就必须先把前面的求拿出来。像这种”先进后出“的结构就是栈

对于栈来说,我们只能在表尾进行插入或者删除,表

2.栈的功能

栈的基本操作主要有:栈的初始化、判空、判满、取栈顶元素、在栈顶进行插入和删除。在栈顶插入元素称为入栈,在栈顶删除元素称为出栈。

由于栈的特性,我们只对栈顶进行取出元素或者是压入元素,所以我们在实现栈的时候需要用一个top指针来指向栈顶元素的地址或者是栈顶元素后面的地址。

3.c语言代码模拟

Stack.h文件:

这个文件用来声明功能函数以及栈结构体数据的定义。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 栈顶int _capacity;  // 容量 
}Stack;
// 初始化栈 
void StackInit(Stack* ps);
// 入栈 
void StackPush(Stack* ps, STDataType data);
//打印
void StackPrint(Stack* ps);
// 出栈 
void StackPop(Stack* ps);
// 获取栈顶元素 
STDataType StackTop(Stack* ps);
// 获取栈中有效元素个数 
int StackSize(Stack* ps);
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps);
// 销毁栈 
void StackDestroy(Stack* ps);

Stack.c文件:

实现各种功能函数

#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"// 初始化栈 
void StackInit(Stack* ps) {assert(ps);ps->_a = NULL;ps->_capacity = 0;ps->_top = 0;
}// 销毁栈 
void StackDestroy(Stack* ps) {assert(ps);free(ps->_a);ps->_a = NULL;ps->_capacity = 0;ps->_top = 0;
}
// 入栈 
void StackPush(Stack* ps, STDataType data) {assert(ps);if (ps->_top == ps->_capacity) {STDataType* temp = NULL;int newcap = 0;if (ps->_capacity == 0) {newcap = 4;}else {newcap = ps->_capacity * 2;}temp = (STDataType*)realloc(ps->_a,sizeof(STDataType) * newcap);if (temp == NULL) {perror("mallc:fail");}ps->_a = temp;ps->_capacity = newcap;}ps->_a[ps->_top] = data;ps->_top++;
}// 出栈 
void StackPop(Stack* ps) {assert(ps&&ps->_top>0);--ps->_top;//return ps->_a[--ps->_top];
}//打印
void StackPrint(Stack* ps) {assert(ps);printf("top=%d  cap=%d\n", ps->_top, ps->_capacity);for (int i = 0; i < ps->_top; i++) {printf("%d->", ps->_a[i]);}printf("\n");
}
// 获取栈顶元素 
STDataType StackTop(Stack* ps) {assert(ps&&ps->_top>0);return ps->_a[ps->_top - 1];
}
// 获取栈中有效元素个数 
int StackSize(Stack* ps) {assert(ps);return ps->_top;
}
// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 
int StackEmpty(Stack* ps) {assert(ps);return ps->_top == 0;
}

test.c文件:

测试栈的功能是否达到预期 

 

#define _CRT_SECURE_NO_WARNINGS 1
#include"Stack.h"void test1() {Stack st;StackInit(&st);StackPush(&st, 1);StackPush(&st, 2);StackPush(&st, 3);StackPush(&st, 4);StackPrint(&st);printf("弹出栈顶元素\n");StackPop(&st);StackPrint(&st);int x =StackTop(&st);printf("获取栈顶元素 %d\n",x);StackPrint(&st);printf("获取栈里有效元素个数 %d\n", StackSize(&st));printf("栈是否为空%d\n", StackEmpty(&st));StackDestroy(&st);
}
int main() {test1();return 0;
}

 

更多推荐

纯c语言模拟栈(初学必看)

本文发布于:2023-11-15 01:03:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1590906.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:必看   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!