• 分别用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;

    }

  • 相关阅读:
    win10删除了应用商店重新安装,应用商店报错不能联网下载
    bps,Bps,pps,fps单位换算
    mongodb查不出数据
    ps切图
    ppt常用设置
    视频录制
    excel设置下拉
    小程序开发
    手把手从0搭建hexo博客
    两种方式实现登录跳转新窗体
  • 原文地址:https://www.cnblogs.com/lxt1105/p/5683386.html
Copyright © 2020-2023  润新知