顺序栈
// 顺序栈
#pragma once
#include <stdio.h>
#define maxSize 100
// 定义
typedef int ElemType;
typedef struct {
ElemType data[maxSize];
int top; //栈顶指针
} SeqStack;
//初始化
void initStack(SeqStack &s) {
s.top = -1; //假设指向栈顶,所以刚开始没有元素是-1,初始也可以设为0,不过代码相应作出改变
}
//判断空
bool isEmpty(SeqStack s) {
return s.top == -1;//空就返回true
}
//进栈
bool push(SeqStack &s, ElemType x) {
if (s.top == maxSize - 1) return false;//已满
s.data[++s.top] = x;
return true;
}
//出栈,由x带回
bool pop(SeqStack &s, ElemType &x){
if (s.top == -1) return false;//栈空
x = s.data[s.top--];
return true;
}
// 读取栈顶元素
ElemType getTop(SeqStack s){
if (s.top == -1) return false;
return s.data[s.top];
}
链式栈
// 链式栈
#pragma once
#include <stdio.h>
# include <stdlib.h>
#define maxSize 100
// 定义
typedef int ElemType;
typedef struct Node {
struct Node *next;
ElemType data;
} LinkNode, *LinkStack;
//初始化,这里是带头节点的
void initStack(LinkStack &s) {
s = (LinkNode *) malloc(sizeof(LinkNode));
s->next = NULL;
}
//判断空
bool isEmpty(LinkStack s) {
return s->next == NULL;//空就返回true
}
//进栈
bool push(LinkStack &s, ElemType x) {
LinkNode *p = (LinkNode *) malloc(sizeof(LinkNode));
p->data = x;
p->next = s->next;
s->next = p;
return true;
}
//出栈,由x带回
bool pop(LinkStack &s, ElemType &x) {
if (s->next == NULL) return false;
LinkNode *p = s, *q = s->next;
x = q->data;
p->next = q->next;
free(q);
q = NULL;
return true;
}
// 读取栈顶元素
ElemType getTop(LinkStack s) {
if (s->next == NULL) return false;
return s->next->data;
}
void showData(LinkStack s) {
LinkNode *p = s->next;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkStack s = NULL;
initStack(s);
//push
for (int i = 0; i < 10; ++i) {
push(s, i);
}
showData(s);
//pop
ElemType x;
pop(s, x);
showData(s);
printf("%d \n", x);
//get
printf("%d \n", getTop(s));
return 0;
}
9 8 7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9
8
Process finished with exit code 0