栈是限制插入和删除只能在一个位置上进行的表,该位置是表的末端,叫做栈的顶。对栈的基本操作有push和pop。栈有时又叫做后进先出表。
栈的实现可以用指针,也可以用数组。
//链表实现栈
typedef int element;
typedef struct Node* PtrNode;
typedef PtrNode stack;
//函数声明
int IsEmpty(stack S); //判断栈是否为空
stack createStack(); //创建空栈
void makeEmpty(stack S); // 删除栈
stack disposeStack(stack S); //销毁栈
void push(element x,stack S); //入栈
void pop(stack S); //出栈
element top(stack S); //返回栈顶的元素值
struct Node {
element data;
PtrNode next;
};
int IsEmpty(stack S) { //判断栈是否为空
return S->next == NULL;
}
stack createStack() { //创建栈
stack S;
S = (stack)malloc(sizeof(struct Node));
S->next = NULL;
return S;
}
void push(element x,stack S) { //入栈
if (S == NULL) {
cout << "栈未创建" << endl;
return;
}
PtrNode tmp = (PtrNode)malloc(sizeof(struct Node));
tmp->data = x;
tmp->next = S->next;
S->next = tmp;
}
void pop(stack S) { //出栈
if (S==NULL || IsEmpty(S)){
cout << "栈为空" << endl;
return;
}
else {
PtrNode tmp;
tmp = S->next;
S->next = tmp->next;
free(tmp);
}
}
void makeEmpty(stack S) { //清空栈内容
if (S == NULL)
return;
while (!IsEmpty(S)) {
pop(S);
}
}
element top(stack S) { //取出栈顶元素的值
if (!IsEmpty(S)) {
return S->next->data;
}
return 0; //栈为空返回0
}
stack disposeStack(stack S) { //销毁栈
makeEmpty(S);
if (IsEmpty(S)) {
free(S);
S = NULL;
cout << "销毁成功" << endl;
return S;
}
cout << "销毁失败" << endl;
return S;
}