Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1662968
  • 博文数量: 695
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4027
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-20 21:22
文章分类

全部博文(695)

文章存档

2018年(18)

2017年(74)

2016年(170)

2015年(102)

2014年(276)

2013年(55)

分类: C/C++

2014-05-23 18:44:39

设计包含 min函数的栈

定义栈的数据结构,要求添加一个 min函数,能够得到栈的最小元素。

要求函数 min、push 以及 pop 的时间复杂度都是 O(1)。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAXSIZE 100

  4. typedef struct StackElement{
  5.     int data;
  6.     int min;
  7. }StackElement;


  8. typedef struct Stack{
  9.     StackElement data[MAXSIZE];
  10.     int top;
  11. }Stack;

  12. void init(Stack &stack){
  13.     stack.top = 0;
  14. }

  15. void push(Stack &stack,int value){
  16.     if(stack.top < MAXSIZE){    
  17.         stack.data[stack.top].data = value;
  18.         stack.data[stack.top].min = stack.top==0?value:stack.data[stack.top-1].min;
  19.         if(stack.data[stack.top].min>value)
  20.             stack.data[stack.top].min = value;
  21.         stack.top++;
  22.     }
  23.     else{
  24.         printf("error:the stack is full,value %d isn't pushed.\n",value);
  25.         exit(EXIT_FAILURE);
  26.     }
  27. }

  28. int pop(Stack &stack){
  29.     if(stack.top > 0){
  30.         return stack.data[--stack.top].data;
  31.     }
  32.     else{
  33.         printf("error:the stack is empty.\n");
  34.         exit(EXIT_FAILURE);
  35.     }
  36. }

  37. int min(Stack stack){
  38.     if(stack.top==0){
  39.         printf("error:the stack is empty.\n");
  40.         exit(EXIT_FAILURE);
  41.     }
  42.     return stack.data[stack.top-1].min;
  43. }

  44. main(){
  45.     int i = 0;
  46.     Stack stack;
  47.     init(stack);
  48.     for(i=256;i>200;i--)
  49.         push(stack,i);
  50.     printf("the min value is %d",min(stack));
  51. }


阅读(918) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~