目录
一.代码展示
1.创建栈结构体
2.初始化栈
3.输出栈
4.入栈
5.出栈
6.总代码
7.测试结果
二.总结
一.代码展示
1.创建栈结构体
//创建栈结构体
typedef struct charStack{
int top;
int data[STACK_MAX_SIZE];
}*stackPtr;
2.初始化栈
//初始化栈
stackPtr initStack(){
stackPtr tempStack=(stackPtr)malloc(sizeof(stackPtr));
tempStack->top=-1;
return tempStack;
}
3.输出栈
//输出栈
void outputStack(stackPtr paraStack){
for(int i=0;i<=paraStack->top;i++){
printf("%c ",paraStack->data[i]);
}
printf("rn");
}
4.入栈
//初始化栈
stackPtr initStack(){
stackPtr tempStack=(stackPtr)malloc(sizeof(stackPtr));
tempStack->top=-1;
return tempStack;
}
3.输出栈
//输出栈
void outputStack(stackPtr paraStack){
for(int i=0;i<=paraStack->top;i++){
printf("%c ",paraStack->data[i]);
}
printf("rn");
}
4.入栈
这里是出栈和入栈的示意图
//入栈
void push(stackPtr stack,int paraValue){
//检查空间
if (stack->top >= STACK_MAX_SIZE - 1) {
printf("Cannot push element: stack full.rn");
return;
}
//update top
stack->top++;
//添加元素
stack->data[stack->top]=paraValue;
}
5.出栈
//出栈
int pop(stackPtr stack){
// 空间检查
if (stack->top < 0) {
printf("Cannot pop element: stack empty.rn");
return ' ';
}
//update top
stack->top--;
//返回栈顶
return stack->data[stack->top+1];
}
6.总代码
#include
#include
#define STACK_MAX_SIZE 10
//创建栈结构体
typedef struct charStack{
int top;
int data[STACK_MAX_SIZE];
}*stackPtr;
//输出栈
void outputStack(stackPtr paraStack){
for(int i=0;i<=paraStack->top;i++){
printf("%d ",paraStack->data[i]);
}
printf("rn");
}
//初始化栈
stackPtr initStack(){
stackPtr tempStack=(stackPtr)malloc(sizeof(stackPtr));
tempStack->top=-1;
return tempStack;
}
//入栈
void push(stackPtr stack,int paraValue){
//检查空间
if (stack->top >= STACK_MAX_SIZE - 1) {
printf("Cannot push element: stack full.rn");
return;
}
//update top
stack->top++;
//添加元素
stack->data[stack->top]=paraValue;
}
//出栈
int pop(stackPtr stack){
// 空间检查
if (stack->top < 0) {
printf("Cannot pop element: stack empty.rn");
return ' ';
}
//update top
stack->top--;
//返回栈顶
return stack->data[stack->top+1];
}
void pushPopTest() {
printf("---- pushPopTest begins. ----rn");
// Initialize.
stackPtr tempStack = initStack();
printf("After initialization, the stack is: ");
outputStack(tempStack);
// Pop.
for (int i = 'a'; i < 'k'; i++) {
printf("Pushing %d.rn", i);
push(tempStack, i);
outputStack(tempStack);
}//Of for i
// Pop.
int s;
for (int j = 0; j< 3; j++) {
s = pop(tempStack);
printf("Pop %d.rn", s);
outputStack(tempStack);
}//Of for i
printf("---- pushPopTest ends. ----rn");
}
int main() {
pushPopTest();
}
7.测试结果
---- pushPopTest begins. ----
After initialization, the stack is:
Pushing 1.
1
Pushing 2.
1 2
Pushing 3.
1 2 3
Pushing 4.
1 2 3 4
Pushing 5.
1 2 3 4 5
Pushing 6.
1 2 3 4 5 6
Pushing 7.
1 2 3 4 5 6 7
Pushing 8.
1 2 3 4 5 6 7 8
Pushing 9.
1 2 3 4 5 6 7 8 9
Pop 9.
1 2 3 4 5 6 7 8
Pop 8.
1 2 3 4 5 6 7
Pop 7.
1 2 3 4 5 6
---- pushPopTest ends. ----
二.总结
#include#include #define STACK_MAX_SIZE 10 //创建栈结构体 typedef struct charStack{ int top; int data[STACK_MAX_SIZE]; }*stackPtr; //输出栈 void outputStack(stackPtr paraStack){ for(int i=0;i<=paraStack->top;i++){ printf("%d ",paraStack->data[i]); } printf("rn"); } //初始化栈 stackPtr initStack(){ stackPtr tempStack=(stackPtr)malloc(sizeof(stackPtr)); tempStack->top=-1; return tempStack; } //入栈 void push(stackPtr stack,int paraValue){ //检查空间 if (stack->top >= STACK_MAX_SIZE - 1) { printf("Cannot push element: stack full.rn"); return; } //update top stack->top++; //添加元素 stack->data[stack->top]=paraValue; } //出栈 int pop(stackPtr stack){ // 空间检查 if (stack->top < 0) { printf("Cannot pop element: stack empty.rn"); return ' '; } //update top stack->top--; //返回栈顶 return stack->data[stack->top+1]; } void pushPopTest() { printf("---- pushPopTest begins. ----rn"); // Initialize. stackPtr tempStack = initStack(); printf("After initialization, the stack is: "); outputStack(tempStack); // Pop. for (int i = 'a'; i < 'k'; i++) { printf("Pushing %d.rn", i); push(tempStack, i); outputStack(tempStack); }//Of for i // Pop. int s; for (int j = 0; j< 3; j++) { s = pop(tempStack); printf("Pop %d.rn", s); outputStack(tempStack); }//Of for i printf("---- pushPopTest ends. ----rn"); } int main() { pushPopTest(); }
7.测试结果
---- pushPopTest begins. ----
After initialization, the stack is:
Pushing 1.
1
Pushing 2.
1 2
Pushing 3.
1 2 3
Pushing 4.
1 2 3 4
Pushing 5.
1 2 3 4 5
Pushing 6.
1 2 3 4 5 6
Pushing 7.
1 2 3 4 5 6 7
Pushing 8.
1 2 3 4 5 6 7 8
Pushing 9.
1 2 3 4 5 6 7 8 9
Pop 9.
1 2 3 4 5 6 7 8
Pop 8.
1 2 3 4 5 6 7
Pop 7.
1 2 3 4 5 6
---- pushPopTest ends. ----
二.总结
栈的存储方式有顺序栈和链栈,这里是顺序栈。栈这个数据结构看起来比较简单,但是能做出的操作还是比较多的,比如可以利用栈来实现计算器的功能。



