zoukankan      html  css  js  c++  java
  • 链表实现栈

    题目来源:LeetCode739

      1 // 链表节点
      2 typedef struct Node {
      3     int value;    // 气温
      4     int index;    // 下标
      5     struct Node *next;
      6 } pNode;
      7 
      8 //
      9 typedef struct MyStack {
     10     pNode *top;
     11 } pMyStack;
     12 
     13 /**
     14 * @brief 创建栈
     15 * @return 指向栈的指针
     16 */
     17 pMyStack* CreateStack()
     18 {
     19     pMyStack *temp = (pMyStack*)malloc(sizeof(pMyStack));
     20     if (temp == NULL) {
     21         printf("Failed to request memory");
     22         exit(1);
     23     }
     24 
     25     temp->top = NULL;
     26     return temp;
     27 }
     28 
     29 /**
     30 * @brief 判断栈是否为空
     31 * @param 指向栈的指针
     32 * @return 1 栈为空,0 栈不为空
     33 */
     34 int IsEmpty(pMyStack *obj)
     35 {
     36     return obj->top == NULL;
     37 }
     38 
     39 
     40 /**
     41 * @brief 入栈
     42 * @param obj 指向栈的指针
     43 * @param value 气温
     44 * @param index 下标
     45 */
     46 void Push(pMyStack *obj, int value, int index)
     47 {
     48     pNode *temp = (pNode*)malloc(sizeof(pNode));
     49     if (temp == NULL) {
     50         printf("Failed to request memory");
     51         exit(1);
     52     }
     53 
     54     temp->value = value;
     55     temp->index = index;
     56     temp->next = obj->top;
     57     obj->top = temp;
     58 }
     59 
     60 /**
     61 * @brief 出栈
     62 * @param obj 指向栈的指针
     63 */
     64 void Pop(pMyStack *obj)
     65 {
     66     if (obj->top != NULL) {
     67         pNode *temp = obj->top;
     68         obj->top = obj->top->next;
     69         free(temp);
     70     }
     71 }
     72 
     73 /**
     74 * @brief 获取栈顶的气温
     75 * @param obj 指向栈的指针
     76 * @return 栈顶的气温
     77 */
     78 int GetTopValue(pMyStack *obj)
     79 {
     80     if (obj->top != NULL) {
     81         return obj->top->value;
     82     } else {
     83         exit(1);
     84     }
     85 }
     86 
     87 /**
     88 * @brief 获取栈顶的下标
     89 * @param obj 指向栈的指针
     90 * @return 栈顶的下标
     91 */
     92 int GetTopIndex(pMyStack *obj)
     93 {
     94     if (obj->top != NULL) {
     95         return obj->top->index;
     96     } else {
     97         return -1;
     98     }
     99 }
    100 
    101 /**
    102  * Note: The returned array must be malloced, assume caller calls free().
    103  */
    104 int* dailyTemperatures(int* T, int TSize, int* returnSize)
    105 {
    106     *returnSize = TSize;
    107     int *result = (int*)malloc(sizeof(int) * TSize);
    108     pMyStack *myStack = CreateStack();
    109 
    110     for (int i = TSize - 1; i >= 0; i--) {
    111         if (i == TSize - 1) {
    112             result[i] = 0;
    113             Push(myStack, T[i], i);
    114             continue;
    115         }
    116 
    117         //找出后边第一个比今天气温高的日子
    118         while (!IsEmpty(myStack)) {
    119             if (GetTopValue(myStack) <= T[i]) {
    120                 Pop(myStack);
    121             } else {
    122                 result[i] = GetTopIndex(myStack) - i;
    123                 break;
    124             }
    125         }
    126 
    127         //栈为空说明后边没有比今天气温高的日子
    128         if (IsEmpty(myStack)) {
    129             result[i] = 0;
    130         }
    131 
    132         Push(myStack, T[i], i);
    133     }
    134 
    135     return result;
    136 }
  • 相关阅读:
    upc组队赛3 T-net【贪心】
    upc组队赛5 Assembly Required【思维】
    upc组队赛5 Bulbs
    upc组队赛5 Ingenious Lottery Tickets【排序】
    upc组队赛5 Hunter’s Apprentice 【判断多边形边界曲线顺逆时针】
    upc组队赛5 Ground Defense【枚举】
    upc组队赛4 Go Latin
    upc组队赛4 TV Show Game 【2-SAT】
    POJ 3250 Bad Hair Day【单调栈入门】
    016.NET5_MVC_视图组件扩展定制
  • 原文地址:https://www.cnblogs.com/hemeiwolong/p/12941424.html
Copyright © 2011-2022 走看看