首页 > 其他分享 >双向栈表

双向栈表

时间:2024-10-09 20:44:43浏览次数:6  
标签:return DoubleStack int value 栈表 bool 双向 stack

include <stdio.h>

include <stdlib.h>

include <stdbool.h>

define MAXSIZE 100 // 定义数组的最大长度

typedef struct {
int data[MAXSIZE];
int top1; // 第一个栈的栈顶指针
int top2; // 第二个栈的栈顶指针
} DoubleStack;

// 初始化双栈
void initStack(DoubleStack *stack) {
stack->top1 = -1;
stack->top2 = MAXSIZE;
}

// 检查第一个栈是否满
bool isFullStack1(DoubleStack *stack) {
return stack->top1 + 1 == stack->top2;
}

// 检查第一个栈是否为空
bool isEmptyStack1(DoubleStack *stack) {
return stack->top1 == -1;
}

// 检查第二个栈是否满
bool isFullStack2(DoubleStack *stack) {
return stack->top2 - 1 == stack->top1;
}

// 检查第二个栈是否为空
bool isEmptyStack2(DoubleStack *stack) {
return stack->top2 == MAXSIZE;
}

// 向第一个栈压入元素
bool pushStack1(DoubleStack *stack, int value) {
if (isFullStack1(stack)) {
printf("Stack 1 is full!\n");
return false;
}
stack->data[++(stack->top1)] = value;
return true;
}

// 从第一个栈弹出元素
bool popStack1(DoubleStack *stack, int *value) {
if (isEmptyStack1(stack)) {
printf("Stack 1 is empty!\n");
return false;
}
*value = stack->data[(stack->top1)--];
return true;
}

// 向第二个栈压入元素
bool pushStack2(DoubleStack *stack, int value) {
if (isFullStack2(stack)) {
printf("Stack 2 is full!\n");
return false;
}
stack->data[--(stack->top2)] = value;
return true;
}

// 从第二个栈弹出元素
bool popStack2(DoubleStack *stack, int *value) {
if (isEmptyStack2(stack)) {
printf("Stack 2 is empty!\n");
return false;
}
*value = stack->data[(stack->top2)++];
return true;
}

int main() {
DoubleStack stack;
initStack(&stack);

// 测试第一个栈  
pushStack1(&stack, 10);  
pushStack1(&stack, 20);  
int value;  
popStack1(&stack, &value);  
printf("Popped from Stack 1: %d\n", value);  

// 测试第二个栈  
pushStack2(&stack, 30);  
pushStack2(&stack, 40);  
popStack2(&stack, &value);  
printf("Popped from Stack 2: %d\n", value);  

return 0;  

}

标签:return,DoubleStack,int,value,栈表,bool,双向,stack
From: https://www.cnblogs.com/wjhfree/p/18455094

相关文章

  • 我店平台模式:商家与消费者双向探索
    在当今这个数字化时代,消费者的购物体验与商家的经营模式正经历着前所未有的变革。而我店平台,作为这一变革的引领者,正通过一系列创新机制,为商家与消费者搭建起一座互利共赢的桥梁。其中,“金币商城”、“抵用券”、“积分奖励”等机制成为了我店平台上的亮点,不仅让消费者享受到了实......
  • linux内核双向链表使用list klist
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、list和klist是什么?二、代码示例1.list2.klist总结前言提示:这里可以添加本文要记录的大概内容:linux内核中大量使用了链表数据结构来存储各种数据,比如device和driver使用klist存储,下......
  • 使用双向链表和哈希表实现LRU缓存
    在日常开发中,缓存是一个非常常见且重要的技术手段,能够显著提升系统性能。为了保证缓存的有效性,需要实现一种机制,在缓存空间不足时,能够自动淘汰最久未被使用的数据。这种机制就是**LRU(LeastRecentlyUsed,最近最少使用)**算法。一、LRU缓存的原理LRU是一种常用的缓存淘汰策......
  • 数据结构:双向链表(Doubly Linked List篇)手把手带你入门数据结构~
    文章目录前言一、双向链表的概念1.结构特点:2.优点:二、双向链表的实现1.双向链表的结构2.双向链表初始化3.双向链表销毁4.双向链表打印5.双向链表尾插6.双向链表头插7.双向链表尾删8.双向链表头删9.双向链表查找10.双向链表指定位置插入11.双向链表指定位置......
  • 套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)
    套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)目录套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Mat......
  • 光伏发电双向电表,光伏发电为什么需要安装双向计量电表?
    什么是防逆流?防逆流的概念:防逆流,简单来说,就是防止电流反向流动的一种措施。在供配电系统中,电流通常是从电网流向负载,但在特定情况下,比如储能系统放电功率大于用户负载功率时,就可能出现电流逆流回电网的现象。想象一下这样的场景:您的家庭或企业安装了一套储能系统,用于在电力......
  • Vue2 子组件参数与父组件的双向绑定
    在Vue2中,通过props字段可以实现父组件向子组件的单向数据流,在父组件数据发生变化时,会实时地传递给子组件,而子组件无法修改父组件传递的数据。以下提出的部分方法为网上收集整理资料得出,未经实践,如有错误欢迎指出。1、不允许直接修改props如果尝试直接修改props中的参数,会......
  • 单词接龙-双向广搜
    单词接龙题目链接LeetCode单词接龙题意概述字典\(wordList\)中从单词\(beginWord\)到\(endWord\)的转换序列是一个按下述规格形成的序列\(beginWord->s_1->s_2->...->s_k:\)每一对相邻的单词只差一个字母。对于\(1<=i<=k\)时,每个\(si\)都在\(w......
  • 一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention
    一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention目录一区霜冰算法+双向深度学习模型+注意力机制!RIME-BiTCN-BiGRU-Attention效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现RIME-BiTCN-BiGRU-Attention霜冰算法优化双向时间卷积双向门控循环......
  • 双向广搜
    双向广搜用途一:小优化BFS的剪枝策略,分两侧展开分支,哪侧数量少就从哪侧展开用途二:特征:全量样本不允许递归完全展开,但是半量样本可以完全展开。(完全展开的过程中有可能能够进行分组,进行常数级优化)过程:把数据分成两部分,每部分各自展开计算结果,然后设计两部分结果的整合逻......