C语言版
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int Elementtype;
typedef struct Node
{
Elementtype Element;
struct Node * Next;
}NODE, *PNODE;
typedef struct Stack {
PNODE PTOP;
PNODE PBOTTOM;
}STACK, *PSTACK;
void InitStack(PSTACK Stack);
void PushStack(PSTACK Stack, int val);
void PopStack(PSTACK Stack, int *val);
void TraverseStack(PSTACK Stack);
bool IsEmpty(PSTACK Stack);
void ClearStack(PSTACK Stack);
int main() {
STACK Stack;
int val = 0;
InitStack(&Stack);
IsEmpty(&Stack);
PushStack(&Stack, 100);
PushStack(&Stack, 200);
PushStack(&Stack, 300);
PushStack(&Stack, 400);
PushStack(&Stack, 500);
PushStack(&Stack, 600);
IsEmpty(&Stack);
TraverseStack(&Stack);
PopStack(&Stack, &val);
TraverseStack(&Stack);
ClearStack(&Stack);
IsEmpty(&Stack);
getchar();
return 0;
}
void InitStack(PSTACK Stack)
{
PNODE PNew = (PNODE)malloc(sizeof(NODE));
if (PNew == NULL)
{
printf("新节点空间分配失败!\n");
exit(-1);
}
Stack->PTOP = PNew;
Stack->PBOTTOM = PNew;
PNew->Next = NULL;
printf("栈创建成功!\n");
}
void PushStack(PSTACK Stack, int val) {
PNODE P = (PNODE)malloc(sizeof(NODE));
if (P == NULL) {
printf("分配空间内存失败!");
exit(-1);
}
P->Element = val;
P->Next = Stack->PTOP;
Stack->PTOP = P;
printf("%d 入栈成功!\n", val);
}
void PopStack(PSTACK Stack, int *val) {
if (Stack->PBOTTOM == Stack->PTOP) {
printf("出栈失败,栈为空!\n");
}
PNODE P = Stack->PTOP;
*val = P->Element;
Stack->PTOP = P->Next;
free(P);
P = NULL;
printf("已将%d从栈弹出!\n", *val);
}
bool IsEmpty(PSTACK Stack) {
if (Stack->PBOTTOM == Stack->PTOP)
{
printf("栈为空!\n");
return true;
}
else
{
return false;
}
}
void TraverseStack(PSTACK Stack) {
if (IsEmpty(Stack)) {
printf("遍历栈失败,栈为空!");
exit(-1);
}
PNODE P = Stack->PTOP;
printf("遍历栈的结果为: ");
while (P != Stack->PBOTTOM) {
printf("%d ", P->Element);
P = P->Next;
}
printf("\n");
}
void ClearStack(PSTACK Stack) {
if (IsEmpty(Stack)) {
printf("栈已经为空,无需清空!\n");
exit(-1);
}
PNODE P = Stack->PTOP;
PNODE Q = NULL;
while (P != Stack->PBOTTOM) {
Q = P->Next;
free(P);
P = Q;
}
Stack->PTOP = Stack->PBOTTOM;
printf("已清空栈!\n");
}
Python版
class Stack(object):
def __init__(self):
self.stack = []
def push_stack(self, value):
self.stack.append(value)
def pop_stack(self):
if self.stack:
self.stack.pop()
else:
print("栈是空的!!!")
def ergodic_stack(self):
print(self.stack)
def is_empty(self):
return bool(self.stack)
def top_stack(self):
return self.stack[-1]
stack = Stack()
stack.push_stack(100)
stack.push_stack(200)
stack.push_stack(300)
stack.push_stack(400)
stack.push_stack(500)
print("入栈成功")
stack.ergodic_stack()
print("遍历成功")
stack.pop_stack()
print("出栈成功")
stack.ergodic_stack()