zoukankan      html  css  js  c++  java
  • 分别用C/C++实现栈

    C语言的方式实现栈:

    #include <stdio.h>

    #include<stdlib.h>

    #include<assert.h>

    struct Link

    {

           int data;

           struct Link* next;

    };

    struct Stack

    {

           struct Link* head;

           int size;

    };

    void StackInit(struct Stack* stack)

    {

           stack->head = NULL;

           stack->size = 0;

    }

    void StackPush(struct Stack* stack, const int data)

    {

           struct Link* node;

           node = (struct Link*)malloc(sizeof(struct Link));

           assert(node != NULL);

           node->data = data;

           node->next = stack->head;

           stack->head = node;

           ++stack->size;

    }

    int StackEmpty(struct Stack* stack)

    {

           return (stack->size == 0);

    }

    int StackPop(struct Stack* stack, int* data)

    {

           if (StackEmpty(stack))

           {

                  return 0;

           }

           struct Link* tmp = stack->head;

           *data = stack->head->data;

           stack->head = stack->head->next;

           free(tmp);

           --stack->size;

           return 1;

    }

    void StackCleanup(struct Stack* stack)

    {

           struct Link* tmp;

           while (stack->head)

           {

                  tmp = stack->head;

                  stack->head = stack->head->next;

                  free(tmp);

           }

           stack->size = 0;

    }

    int main(void)

    {

           struct Stack stack;

           StackInit(&stack);

           int i;

           for (i = 0; i < 5; i++)

           {

                  StackPush(&stack, i);

           }

           while (!StackEmpty(&stack))

           {

                  StackPop(&stack, &i);

                  printf("%d ", i);

           }

           printf(" ");

           return 0;

    }

    C++数据抽象的方式实现栈:

    #include<iostream>

    using namespace std;

    class Stack

    {

           struct Link

           {

                  int data_;

                  Link* next_;

                  Link(int data, Link* next) :data_(data), next_(next)

                  {

                  }

           };

    public:

           Stack() :head_(0), size_(0)

           {

                 

           }

           ~Stack()

           {

                   Link* tmp;

                         while (head_)

                         {

                                tmp = head_;

                                head_ = head_->next_;

                                delete tmp;

                         }

           }

           void Push(const int data)

           {

                  Link* node = new Link(data, head_);

                  head_ = node;

                  ++size_;

           }

           bool Empty()

           {

                  return (size_ == 0);

           }

           bool Pop( int& data)

           {

                  if (Empty())

                  {

                         return false;

                  }

                   Link* tmp = head_;

                  data = head_->data_;

                  head_ = head_->next_;

                  delete tmp;

                  --size_;

                  return true;

           }    

    private:

           Link* head_;

           int size_;

    };

    int main(void)

    {

           Stack stack;

           int i;

           for (i = 0; i < 5; i++)

           {

                  stack.Push(i);

           }

           while (!stack.Empty())

           {

                  stack.Pop(i);

                  cout << i << " ";

           }

           cout << endl;

           return 0;

    }

  • 相关阅读:
    二次离线莫队
    一些不等积分的练习(持续更新)
    杂题20210427
    杂题20210415
    杂题20210203
    php pack()函数详解与示例
    SHOI2020抱灵祭
    BJOI2021游记+题解
    博客搬家
    听课记录 210220【分治,树分治,CDQ分治】
  • 原文地址:https://www.cnblogs.com/lxt1105/p/5683386.html
Copyright © 2011-2022 走看看