用C的方式实现栈
#include <stdio.h>
#include <stdlib.h>
struct Link
{
int data;
struct Link* next;
};
struct Stack
{
struct Link* head;
int size;
};
void StackIinit(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));
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()
{
struct Stack stack;
StackIinit(&stack);
int i;
for(i=0;i<5;i++)
{
StackPush(&stack,i);
}
while(!StackEmpty(&stack))
{
StackPop(&stack,&i);
printf("%d",i);
}
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;
}
size_ = 0;
}
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()
{
Stack stack;
int i;
for(i=0;i<5;i++)
{
stack.Push(i);
}
while(!stack.Empty())
{
stack.Pop(i);
cout << i << endl;
}
return 0;
}