当前位置: 首页 > article >正文

题海拾贝:力扣 232.用栈实现队列

         Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

我的博客:<但凡.

我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》

欢迎点赞,关注!

1、题目

 

题目链接:232. 用栈实现队列 - 力扣(LeetCode) 

2、题解 

//快速写一下
typedef int STdate;
typedef struct stack
{
	STdate* arr;//数组模拟栈
	int top;
	int capacity;
}ST;
void InitST(ST* stack)
{
	stack->arr = NULL;
	stack->capacity = 0;//能存放的最大数据个数
	stack->top = 0;//有效数据个数
}
void Destory(ST* stack)
{
	if (stack->arr)
	{
		free(stack->arr);
		stack->arr = NULL;
	}
	stack->capacity = 0;//能存放的最大数据个数
	stack->top = 0;//有效数据个数
}
void STpush(ST* stack, STdate x)
{
	assert(stack);
	//判断是否还有空间
	if (stack->top == stack->capacity)
	{
		int newcapacity = stack->capacity ? 2 * stack->capacity : 1;
		STdate* p = (STdate*)realloc(stack->arr, newcapacity * sizeof(int));
		if (p == NULL)
		{
			exit(1);
		}
		stack->arr = p;
		stack->capacity = newcapacity;
	}
	stack->arr[stack->top] = x;
	stack->top++;
}
bool STempty(ST* stack)
{
	if (stack->top != 0)
	{
		return false;
	}
	else
	{
		return true;
	}
}
void STpop(ST* stack)
{
	assert(!STempty(stack));
	stack->top--;
}
int STsize(ST* stack)
{
	return stack->top;
}
int STtop(ST* stack)
{
	assert(stack);
	return stack->arr[stack->top - 1];
}
//以上是栈的操作

typedef struct {
    //包含两个栈
    ST STpush;
    ST STpop;
} MyQueue;

//初始化
MyQueue* myQueueCreate() {
    MyQueue* qu=(MyQueue*)malloc(sizeof(MyQueue));
    InitST(&qu->STpush);
    InitST(&qu->STpop);
    return qu;
}

void myQueuePush(MyQueue* obj, int x) {
    //插入元素就往插入元素的栈里插入就行
    STpush(&obj->STpush,x);
}

int myQueuePop(MyQueue* obj) {
    //在删除栈为空的情况下
    //删除需要把插入栈里的所有元素都转移到删除栈里,然后再弹出栈顶
    if(STempty(&obj->STpop))
    {
        while(!STempty(&obj->STpush))
        {
        STpush(&obj->STpop,STtop(&obj->STpush));
        STpop(&obj->STpush);
        }
    }
    int ele=STtop(&obj->STpop);
    STpop(&obj->STpop);
    return ele;
}

int myQueuePeek(MyQueue* obj) {
    //在删除栈为空的情况下
    //删除需要把插入栈里的所有元素都转移到删除栈里,然后再弹出栈顶
    if(STempty(&obj->STpop))
    {
        while(!STempty(&obj->STpush))
        {
        STpush(&obj->STpop,STtop(&obj->STpush));
        STpop(&obj->STpush);
        }
    }
    int ele=STtop(&obj->STpop);//队列开头元素
    return ele;
}

bool myQueueEmpty(MyQueue* obj) {
    return STempty(&obj->STpush)&&STempty(&obj->STpop);
}

void myQueueFree(MyQueue* obj) {
    Destory(&obj->STpush);
    Destory(&obj->STpop);
    free(obj);
    obj=NULL;
}

/**
 * Your MyQueue struct will be instantiated and called as such:
 * MyQueue* obj = myQueueCreate();
 * myQueuePush(obj, x);
 
 * int param_2 = myQueuePop(obj);
 
 * int param_3 = myQueuePeek(obj);
 
 * bool param_4 = myQueueEmpty(obj);
 
 * myQueueFree(obj);
*/

         好了,今天的内容就分享到这,我们下期再见!

 

 


http://www.kler.cn/a/519354.html

相关文章:

  • 834 数据结构(自用)
  • ThreadLocal概述、解决SimpleDateFormat出现的异常、内存泄漏、弱引用、remove方法
  • 验证二叉搜索树(力扣98)
  • IoTDB 2025 春节值班与祝福
  • CentOS 7 安装fail2ban hostdeny方式封禁ip —— 筑梦之路
  • 枚举与模拟 练习
  • 如何在Spring Boot项目中高效集成Spring Security
  • 前端开发中的新兴技术:Web Components 实战应用
  • HTML一般标签和自闭合标签介绍
  • C++解决走迷宫问题:DFS、BFS算法应用
  • 力扣 Hot 100 题解 (js版)更新ing
  • 记录一个连不上docker中的mysql的问题
  • golang 使用双向链表作为container/heap的载体
  • python自动获取所需要的包并且保存到requirements.txt中
  • Redis高阶6-预热、雪崩、击穿、穿透问题
  • GoFrame MongoDB 使用指南
  • 【ESP32】ESP-IDF开发 | WiFi开发 | TCP传输控制协议 + TCP服务器和客户端例程
  • svn: E000111: Error running context: Connection refused
  • PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)
  • 侧边栏布局和响应式布局的对比(Semi Design)
  • 查询本周一到周五的数据
  • STM32的Host U盘
  • vue3 el-form表格滚动
  • 数据库性能优化(sql优化)_SQL执行计划02_yxy
  • Kafka运维宝典 (三)- Kafka 最大连接数超出限制问题、连接超时问题、消费者消费时间超过限制问题详细介绍
  • Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)