笔试c语言实现栈,栈的实现与操作(C语言实现)
栈的定义
1, 栈是一种特殊的线性表
2,栈仅能在线性表的一端进行操作
3,栈顶(Top): 允许操作的一端 允许操作的一端
4,栈底(Bottom): ,不允许操作的一端 不允许操作的一端
这里我做出了 栈的顺序实现 和 链式实现,分别如下:
=========================================华丽丽的分割线==========================================================
栈的顺序实现:
首先,我们要弄明白的是,栈本质上就是线性表,是一种特殊的线性表,只是只能在一端进行操作罢了,故而很多操作线性表是很类似的。因此,我们可以将之前写的
顺序线性表的实现及操作(C语言实现)
中的代码直接拿过来使用,以达到代码复用的效果(代码就不在此处追述了)。
头文件:
#ifndef _SEQSTACK_H_
#define _SEQSTACK_H_
typedef void SeqStack;
SeqStack* SeqStack_Create(int capacity);
void SeqStack_Destroy(SeqStack* stack);
void SeqStack_Clear(SeqStack* stack);
int SeqStack_Push(SeqStack* stack, void* item);
void* SeqStack_Pop(SeqStack* stack);
void* SeqStack_Top(SeqStack* stack);
int SeqStack_Size(SeqStack* stack);
int SeqStack_Capacity(SeqStack* stack);
#endif
源文件: // 栈.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
#include "SeqStack.h"
#include "SeqList.h"
int _tmain(int argc, _TCHAR* argv[])
{
SeqStack* stack = SeqStack_Create(20);
int a[10];
int i = 0;
for(i=0; i<10; i++)
{
a[i] = i;
SeqStack_Push(stack, a + i);
}
printf("Top: %d\n", *(int*)SeqStack_Top(stack));
printf("Capacity: %d\n", SeqStack_Capacity(stack));
printf("Length: %d\n", SeqStack_Size(stack));
while( SeqStack_Size(stack) > 0 )
{
printf("Pop: %d\n", *(int*)SeqStack_Pop(stack));
}
SeqStack_Destroy(stack);
system("pause");
return 0;
}
//创建栈
SeqStack* SeqStack_Create(int capacity)
{
return SeqList_Create(capacity);
}
//销毁
void SeqStack_Destroy(SeqStack* stack)
{
SeqList_Destroy(stack);
}
//清空
void SeqStack_Clear(SeqStack* stack)
{
SeqList_Clear(stack);
}
//压栈
int SeqStack_Push(SeqStack* stack, void* item)
{
return SeqList_Insert(stack, item, SeqList_Length(stack));
}
//弹栈
void* SeqStack_Pop(SeqStack* stack)
{
return SeqList_Delete(stack, SeqList_Length(stack) - 1);
}
//获得栈顶
void* SeqStack_Top(SeqStack* stack)
{
return SeqList_Get(stack, SeqList_Length(stack) - 1);
}
//栈的大小
int SeqStack_Size(SeqStack* stack)
{
return SeqList_Length(stack);
}
//顺序栈的总大小
int SeqStack_Capacity(SeqStack* stack)
{
return SeqList_Capacity(stack);
}
运行结果: Top: 9
Capacity: 20
Length: 10
Pop: 9
Pop: 8
Pop: 7
Pop: 6
Pop: 5
Pop: 4
Pop: 3
Pop: 2
Pop: 1
Pop: 0
请按任意键继续. . .
=====================================我是分割线========================================================
栈的链式实现:
同栈的顺序实现一样,栈的链式实现本质上其实就是单链表的形式,也只是在一头操作罢了,因此我们这里亦采用代码复用的方法,具体代码请参阅:
。
头文件:
#ifndef _LINKSTACK_H_
#define _LINKSTACK_H_
typedef void LinkStack;
LinkStack* LinkStack_Create();
void LinkStack_Destroy(LinkStack* stack);
void LinkStack_Clear(LinkStack* stack);
int LinkStack_Push(LinkStack* stack, void* item);
void* LinkStack_Pop(LinkStack* stack);
void* LinkStack_Top(LinkStack* stack);
int LinkStack_Size(LinkStack* stack);
#endif
源文件: #include "stdafx.h"
#include "LinkList.h"
#include "LinkStack.h"
#include
#include
int main(int argc, char *argv[])
{
LinkStack* stack = LinkStack_Create();
int a[10];
int i = 0;
for(i=0; i<10; i++)
{
a[i] = i;
LinkStack_Push(stack, a + i);
}
printf("Top: %d\n", *(int*)LinkStack_Top(stack));
printf("Length: %d\n", LinkStack_Size(stack));
while( LinkStack_Size(stack) > 0 )
{
printf("Pop: %d\n", *(int*)LinkStack_Pop(stack));
}
LinkStack_Destroy(stack);
system("pause");
return 0;
}
typedef struct _tag_LinkStackNode
{
LinkListNode header;
void* item;
} TLinkStackNode;
//创建
LinkStack* LinkStack_Create()
{
return LinkList_Create();
}
//销毁
void LinkStack_Destroy(LinkStack* stack)
{
LinkStack_Clear(stack);
LinkList_Destroy(stack);
}
//清空
void LinkStack_Clear(LinkStack* stack)
{
while( LinkStack_Size(stack) > 0 )
{
LinkStack_Pop(stack);
}
}
//压栈
int LinkStack_Push(LinkStack* stack, void* item)
{
TLinkStackNode* node = (TLinkStackNode*)malloc(sizeof(TLinkStackNode));
int ret = (node != NULL) && (item != NULL);
if( ret )
{
node->item = item;
ret = LinkList_Insert(stack, (LinkListNode*)node, 0);
}
if( !ret )
{
free(node);
}
return ret;
}
//出栈
void* LinkStack_Pop(LinkStack* stack)
{
TLinkStackNode* node = (TLinkStackNode*)LinkList_Delete(stack, 0);
void* ret = NULL;
if( node != NULL )
{
ret = node->item;
free(node);
}
return ret;
}
//获得栈顶
void* LinkStack_Top(LinkStack* stack)
{
TLinkStackNode* node = (TLinkStackNode*)LinkList_Get(stack, 0);
void* ret = NULL;
if( node != NULL )
{
ret = node->item;
}
return ret;
}
//获得栈的大小
int LinkStack_Size(LinkStack* stack)
{
return LinkList_Length(stack);
}
运行结果:
Top: 9
Length: 10
Pop: 9
Pop: 8
Pop: 7
Pop: 6
Pop: 5
Pop: 4
Pop: 3
Pop: 2
Pop: 1
Pop: 0
请按任意键继续. . .
如有错误,望不吝指出~
笔试c语言实现栈,栈的实现与操作(C语言实现)相关推荐
- go语言mysql删除记录_MySQL数据库删除操作-Go语言中文社区
删除数据库 DROP DATABASE [IF EXISTS] 数据库名; 例如:删除school数据库 IF EXISTS 为可选,判断是否存在,如果不存在则会抛出异常 删除数据表 DROP TAB ...
- 数据结构源码笔记(C语言):栈的基本操作
#include <stdio.h> #define MaxSize 100typedef char ElemType;typedef struct {char stack[MaxSize ...
- 顺序表输入栈元素c语言,C语言数据结构之栈简单操作
C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍 ...
- java语言链栈_Java语言实现数据结构栈代码详解
近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...
- 《数据结构C语言版》——栈和队列详解(图文并茂),从零开始的学习
哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...
- 如何轻松使用 C 语言实现一个栈?
作者 | 写代码的篮球球痴 什么是数据结构? 数据结构是什么?要了解数据结构,我们要先明白数据和结构,数据就是一些int char 这样的变量,这些就是数据,如果你是一个篮球爱好者,那么你的球鞋就是你 ...
- c语言栈的实现以及操作_C++语言实现顺序栈
在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以看看之前的文章,下面是链接C语言实现顺序栈在这 ...
- 浅谈C语言内存(栈)
浅谈C语言内存 文章目录 浅谈C语言内存 内存分配 栈 斐波纳契数列 内存分配 在C语言中内存分别分为栈区(stack).堆区(heap).未初始化全局数据区.已初始化全局数据区.静态常量区(stat ...
- C语言手写栈、手写计算器
C语言实现表达式求值 文章结构 C语言手写栈Struct Stack 后缀表达式求值 中缀表达式转后缀表达式 文章结构 本文尝试通过纯C语言写一个计算器,在Visual Studio和VScode运行 ...
- (C语言)静态栈编写简单计算器(感悟与详细解析)
C语言数据结构静态栈--计算器的实现 下面我来详细的解释一下我编写的计算器代码.... 有必要先说明一下的是,此代码中含有两个栈:数据栈和算符栈: 数据栈:存放double型数字: 算符栈:存放cha ...
最新文章
- 如何在SharePoint2010中添加Deep Zoom Image
- SSD(Single shot multibox detector)目标检测模型架构和设计细节分析
- redis.conf配置选项如下
- matlab基础入门之教你如何实现最小二乘法(附MATLAB代码)
- 三十五、深入Vue.js语法(下篇)
- 【mysq 5.7.31】远程访问权限(允许远程连接)
- socket和IOCTL结合实现网络采集
- 施一公谈自己35岁和53岁的区别
- Google Earth的十个常用技巧应用
- led灯光衰怎么解决_花小钱办大事 主流直插式LED大灯横评
- IOS APP 上传到AppStore
- 拓扑链表c语言,数据结构2.2 链表的实现
- 看单片机原理图-电源电路
- android timepicker 设置颜色,android – 更改TimePicker文本颜色
- 如何做一名优秀的工程师
- iOS内购-防越狱破解刷单
- 算法基础课【合集1】
- win10 ST-GCN复现
- 网络爬虫与机器学习算法在城市分析中的应用(python)
- 2021年压力容器作业R2移动式压力容器充装证考试题库
热门文章
- Maven报错Please ensure you are using JDK 1.4 or above and not a JRE解决方法!
- C/C++ 格式化读取和读取一行
- SpaceNet 数据集
- gis数据与cad数据转换之间的关系
- 【树】Unique Binary Search Trees II
- 又延伸到socket去了。
- HTML5学习笔记简明版(1):HTML5介绍与语法
- ue4是什么意思_UE4 C++基础教程 - 资源常见名词解释
- 分布式事务之基础理论(CAP/BASE理论)篇
- Java中的DES加密与解密工具类