Stack栈——getMin()

获取栈——stack中最小的元素

  1. 建立另一个栈——temp
  2. 如果两个栈都为空,则将node同时push两个栈中
  3. 接着插入new_node,如果temp不为空,则比较栈顶node->data和new_node->data。
  4. 如果node->data大于new_node->data,则将new_node同时push两个栈中
  5. 反之,只push进stack栈中
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3
 4 struct stack
 5 {
 6     int data;
 7     struct stack * next;
 8 };
 9 struct stack * newNode(int data)
10 {
11     struct stack * new_node = (struct stack *)malloc(sizeof(struct stack));
12     new_node->data = data;
13     new_node->next = NULL;
14 }
15 void push(struct stack ** root, int data)
16 {
17     struct stack * new_node = newNode(data);
18
19     new_node->next = (*root);
20     (*root) = new_node;
21     printf("\n%-2d pushed to stack", data);
22 }
23 int isEmpty(struct stack * root)
24 {
25     return NULL == root ? 1 : 0;
26 }
27 int pop(struct stack ** root)
28 {
29     if(isEmpty((*root)))
30     {
31         printf("\nEmpty!");
32         return 0;
33     }
34     struct stack * temp = (*root);
35     int num = temp->data;
36     (*root) = temp->next;
37     free(temp);
38
39     return num;
40 }
41 void push_new(struct stack ** root, struct stack ** other, int data)
42 {
43     if(NULL == (*root) || NULL == (*other))
44     {
45         push(root, data);
46         push(other, data);
47     }
48     else if(data < ((*other)->data))
49     {
50         printf("\n%-2d poped off", pop(other));
51         push(other, data);
52         push(root, data);
53     }else if(data > ((*other)->data))
54     {
55         push(root, data);
56     }
57 }
58 int getMin(struct stack * other)
59 {
60     return other->data;
61 }
62 int main(void)
63 {
64     struct stack * root = NULL;
65     struct stack * other = NULL;
66
67     push_new(&root, &other, -5);
68     push_new(&root, &other, 1);
69     push_new(&root, &other, 8);
70     push_new(&root, &other, 0);
71     push_new(&root, &other, -1);
72     push_new(&root, &other, -7);
73
74     printf("\nMIN = %d", getMin(other));
75     return 0;
76 }

原文地址:https://www.cnblogs.com/AI-Cobe/p/9358702.html

时间: 2024-11-09 00:35:48

Stack栈——getMin()的相关文章

Stack栈 Heap堆

Stack(栈) 栈(stack) 又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一端进行插入和删除运算.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素. 在计算机科学中是限定仅在表尾进行插入或删除操作的线性表.栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数

Stack(栈)的简单使用

import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实现是数组. * 此处只介绍了Stack自己定义的方法,父类中的方法不再一一介绍. */ public class TestStack { // 定义一个栈 Stack<String> stack; @Before public void before() { // 实例化栈变量 stack = n

STL --&gt; stack栈

stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO) 使用该容器时需要包含#include<stack>头文件: 定义stack对象的示例代码如下: stack<int>s1; stack<string>s2; stack的基本操作有: 1 s.empty() 如果栈为空返回true,否则返回false 2 s.size() 返回栈中元素的个数 3 s.pop() 删除栈顶元素但不返回其值 4 s.top() 返回栈顶的元素

基于数组实现Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: 1 package com.stack; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 6 /** 7 * St

Java 自定义Stack栈类及应用

栈是存放对象的一种特殊容器,在插入与删除对象时,这种结构遵循后进先出( Last-in-first-out,LIFO)的原则.java本身是有自带Stack类包,为了达到学习目的已经更好深入了解stack栈,自己动手自建java stack类是个很好的学习开始: 自建Java Stack 类 Stack 类: package com.stack; import java.util.ArrayList; import java.util.Arrays; /** * Stack Class * @a

实现stack 加上&#183;getMin功能 时间复杂度为O(n)

package com.hzins.suanfa; import java.util.Stack; /** * 实现stack 加上·getMin功能 时间复杂度为O(n) * @author Administrator * */ public class GetMinStack { private Stack<Integer> stackData; private Stack<Integer> stackMin; public GetMinStack(){ this.stackD

java 中的内存分为四个部分:stack(栈),heap(堆),data segment

http://www.qdmm.com/BookReader/113167,54166719.aspx http://www.qdmm.com/BookReader/113167,54166867.aspx http://www.qdmm.com/BookReader/113167,54166868.aspx http://www.qdmm.com/BookReader/113167,54166869.aspx http://www.qdmm.com/BookReader/113167,5416

java集合类——Stack栈类

今日走读代码时,遇到stack栈类,特查看java的API文档,总结如下: Stack继承Vector类. 栈的特点是后进先出. API中Stack自身的方法不多,基本跟栈的特点有关. 现附上例子,后续继续总结 /** * @作者 whs * @创建日期 2015年2月4日 * @版本 V 1.0 */ package thread.pool; import java.util.Stack; public class StackExam { public static void main(Str

Stack栈的三种含义

理解stack栈对于理解程序的执行至关重要.easy混淆的是,这个词事实上有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in,first out). 在这样的数据结构中,数据像积木那样一层层堆起来,后面添?的数据就放在最上层.使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出". 与这样的结构配套的是以下几种特定的方法: (1)push:在最顶层添?数据 (2)pop:返回并移除最