首页 > 其他分享 >C实现顺序栈

C实现顺序栈

时间:2023-11-13 21:47:34浏览次数:21  
标签:顺序 return 实现 top Stack int maxsize stack

顺序栈的基本模型

完整的C代码

点击查看代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct StackNode {
	/*metadata node of stack*/
	int* data;  //point to an array
	int top;
	int maxsize;
} StackNode, *Stack;

Stack createStack(int maxsize);
bool isEmpty(Stack stack);
bool isFull(Stack stack);
bool push(Stack stack, int element);
int pop(Stack stack);
void destroyStack(Stack stack);

int main(int argc, char* argv[]) {
	/*Implement stack by using of array*/
	Stack stack = createStack(10);
	push(stack, 32);
	push(stack, 16);
	push(stack, 20);
	push(stack, 18);
	printf("top = %d\n", stack->top);
	printf("popped value = %d\n", pop(stack));	
	printf("top = %d\n", stack->top);
	return 0;
}

Stack createStack(int maxsize) {
	/*create a new stack*/
	Stack stack = (Stack)malloc(sizeof(StackNode));
	stack->data = (int*)malloc(sizeof(int) * maxsize);
	stack->top = -1;
	stack->maxsize = maxsize;
	return stack;
}

bool isEmpty(Stack stack) {
	/*the stack is empty?*/
	return stack->top == -1;
}

bool isFull(Stack stack) {
	/*the stack is full?*/
	return stack->top == stack->maxsize - 1;
}

bool push(Stack stack, int element) {
	/*push element to the stack*/
	if (isFull(stack)) {
		printf("Ths stack is full!\n");	
		return false;
	} else {
		(stack->data)[++stack->top] = element;
		return true;
	}
}

int pop(Stack stack) {
	/*pop the element*/
	if (isEmpty(stack)) {
		printf("Ths stack is empty!");
		return 99999;
	} else {
		return (stack->data)[stack->top--];
	}
}

void destroyStack(Stack stack) {
	/*destroy the stack*/
	free(stack->data);
	stack->data = NULL;
	free(stack);
	stack = NULL;
}

标签:顺序,return,实现,top,Stack,int,maxsize,stack
From: https://www.cnblogs.com/gjsun/p/17830050.html

相关文章

  • Python实现顺序栈
    顺序栈的基本模型完整代码点击查看代码#!/usr/bin/envpython3classStack:#stack:initiate,is_empty,is_full,pushandpopdef__init__(self,maxsize):self.data=[0foriinrange(maxsize)]self.top=-1self.maxsize......
  • 面试必刷TOP101:27、按之字形顺序打印二叉树
    题目题解importjava.util.*;/**publicclassTreeNode{*intval=0;*TreeNodeleft=null;*TreeNoderight=null;*publicTreeNode(intval){*this.val=val;*}*}*/publicclassSolution{/***代码中的类名、方......
  • 网银转账虚拟生成器在线制作,工商农业邮政建设招商,标签+对话框+画板+快照实现
    标签+对话框+画板+快照实现就实现了一个虚拟截图生成器,当然我加了水印了,这个图片你根本盗用不了,图片模版的话网上真的太多了,我这个也是网上找的,自己百度图库搜一下,然后标签记得一定用黑月的透明标签,如果不透明的话颜色看起来会有失真的感觉,图片有点灰白,而易语言默认标签是纯白的,直......
  • 使用 npm config set script-shell 实现跨平台的脚本执行需求
    npmconfigsetscript-shellC:\\app\\Git20180223\\bin\\bash.exe这个命令的准确含义是设置npm的脚本(shell)执行环境为"C:\app\Git20180223\bin\bash.exe"。这个命令用于修改npm的配置,具体来说,它修改了npm的一个配置项,该配置项用于指定在执行npm脚本时使用的shell程序。在这个......
  • SSH高级应用之远程端口转发并实现网关功能
    端口转发实现逻辑我们直接来看这图好,那么现在呢?你假设你是出差在外的用户,比方说有一个笔记本用户出差了。明白了好。现在是这样的,这个服务器呢?是在你企业内部的。那么,企业内部要想。让互联网的用户想访问,通常来讲是访问不了的,因为什么有防火墙?他会阻止你访问企业内部的服务器,所以......
  • Object.defineProperty(obj,key,val)不可以监听数组变化,需要做特殊处理,所以Vue3.0使用
    关于Vue双向数据绑定说法错误的是()AVue实现双向数据绑定是采用数据劫持和发布者-订阅者模式BObject.defineProperty(obj,key,val)可以监听数组变化,不需要做特殊处理CVue2.0数据劫持是利用ES5的Object.defineProperty(obj,key,val)方法来劫持每个属性的getter和setterD......
  • js实现分割上传大文件
    本文实例介绍了js上传文件操作,分享给大家供大家参考,具体内容如下<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"lang="zh-CN">&l......
  • C实现循环队列
    1.循环队列的基本模型1.1此模型采用的队列判空条件是rear==front为真1.2此模型采用的队列已满条件是(rear+1)%maxsize==front为真,因此有一个数组单元(也就是front指向的数组单元)不可使用1.3可以在队列结点加一个成员表示最近一次对队列的操作为入队操作或者出队操作,这样......
  • 开发企业微信群机器人,实现定时提醒
    大家好,我是鱼皮,今天分享一个用程序解决生活工作问题的真实案例。说来惭愧,事情是这样的,在我们公司,每天都要轮流安排一名员工(当然也包括我)去楼层中间一个很牛的饮水机那里接水。但由于大家每天都有自己的工作,经常出现忘记接水的情况,导致大家口渴难耐。怎么解决这个问题呢?我想到了几种......
  • 实现冒泡排序算法
    实现冒泡排序算法#include<stdio.h> voidswap(int*xp,int*yp){   inttemp=*xp;   *xp=*yp;   *yp=temp;} voidbubbleSort(intarr[],intn){   for(inti=0;i<n-1;i++){       for(intj=0;j<n-i-1;j++){       ......