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("\n");

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;

}

最新文章

  1. Spring 下默认事务机制中@Transactional 无效的原因
  2. VC++ : error LNK2005: ... already defined in *.obj
  3. Java class,Object,Class的区别
  4. js中java式的类成员
  5. PHP魔法方法的使用
  6. ListView优化-getView优化
  7. HDU5653 Bomber Man wants to bomb an Array 简单DP
  8. 解决DataTable中的DataColumn类型默认为int类型时, 导致不能修改其列值为其他类型的解决办法
  9. struts1:(Struts)ActionForm类及表单数据验证
  10. MVC 6 写法
  11. Git详解之一:Git起步
  12. Linux系统下rm删除文件后空间没有释放问题解决办法
  13. 初学python笔记----字符串
  14. Algorithm Visualizer
  15. datatable to List&lt;T&gt;带缓存
  16. 【Spring】19、spring配置数据源的4种方式
  17. 牛客网 PAT 算法历年真题 1008 : 锤子剪刀布 (20)
  18. android SpannableString使用详解
  19. ~/.bashrc文件写错, 导致Linux全部命令丢失
  20. SQLServer 查看备份进度

热门文章

  1. UVa 10684 - The jackpot
  2. 10-instanceof
  3. HDU1217:Arbitrage(SPFA)
  4. jQuery中animate动画第二次点击事件没反应
  5. Oracle 表空间迁移
  6. 第五组UI组件:ProgressBar及其子类
  7. C++中的输入参考
  8. C# 程序只能执行一次
  9. Winform ListView的用法
  10. Js获取复选框checkbox的值