目录
一、栈的定义和示意图
1.栈的定义
栈(stack)又名堆栈,它是一种运算受限的线性表,要严格遵循先进后出的原理。
2.栈的示意图
二、顺序栈的定义和初始化
1.顺序栈的定义
顺序栈被定义为一个结构体类型,其中Datatype为栈元素的数据类型,data为一个一维数组,用于存储栈中的数据元素,top用于几率栈顶所在的位置。
2.顺序栈的初始化
初始化操作既创建一个空栈,把栈顶指针设为-1即可。
三、判断栈空和栈满
1.判断栈是否为空
2.判断栈是否已满
判断栈空和栈满都是用栈顶指针top来判断,若top为-1则栈空,若top为MAX-1既为栈满(MAX为给定的顺序栈存储空间的总分配量)。
四、顺序栈的进栈和出栈
1.顺序栈的进栈
入栈要先判断栈是否已满,若没满则先将top指针+1,再将数据放入栈顶位置上。
2.顺序栈的出栈
出栈要先判断栈是否已满,若没满则先将栈顶数据带出,再使top指针-1;
注:出栈只是栈顶指针改变,元素还在数组内。
五、顺序栈的创建和出栈并输出
在了解了上面的内容后就可以进行栈的相关操作,入栈的创建和出栈并输出栈的元素。
1.顺序栈的创建
栈的创建要先初始化栈,再通过进栈函数输入所需的数据。
2.顺序栈的出栈并输出栈中元素
用一个变量接受出栈函数带出的数据,并循环直到栈为空为止。
六、代码总览和运行结果
一、栈的定义和示意图
1.栈的定义
栈(stack)又名堆栈,它是一种运算受限的线性表,要严格遵循先进后出的原理。
2.栈的示意图
二、顺序栈的定义和初始化
1.顺序栈的定义
typedef struct { DataType data[MAX]; //顺序栈的存储类型 int top; //记录栈顶的指针,在顺序栈中类似于数组下标 }Seqstack;
顺序栈被定义为一个结构体类型,其中Datatype为栈元素的数据类型,data为一个一维数组,用于存储栈中的数据元素,top用于几率栈顶所在的位置。
2.顺序栈的初始化
//栈的初始化 void InitStack(Seqstack* s) { s->top = -1; //初始化栈顶指针为-1 }
初始化操作既创建一个空栈,把栈顶指针设为-1即可。
三、判断栈空和栈满
1.判断栈是否为空
//判断栈是否为空 int EmptyStack(Seqstack* s) { if (s->top == -1) return 1; //若空返回1,非空返回0 else return 0; }
2.判断栈是否已满
//判断栈是否已满 int FullStack(Seqstack* s) { if(s->top==MAX-1) return 1; //若满返回1,非空返回0 else return 0; }
判断栈空和栈满都是用栈顶指针top来判断,若top为-1则栈空,若top为MAX-1既为栈满(MAX为给定的顺序栈存储空间的总分配量)。
四、顺序栈的进栈和出栈
1.顺序栈的进栈
//入栈 int Push(Seqstack* s,DataType x) { if (FullStack(s)) //调用函数判断栈是否已满 { printf("栈满,不可入栈!"); return 0; } else { s->top++; //将栈顶指针上一位 s->data[s->top] = x; return 1; } }
入栈要先判断栈是否已满,若没满则先将top指针+1,再将数据放入栈顶位置上。
2.顺序栈的出栈
//出栈 int Pop(Seqstack* s,DataType *x) { if (EmptyStack(s)) { return 0; } else { *x = s->data[s->top]; s->top--; return 1; } }
出栈要先判断栈是否已满,若没满则先将栈顶数据带出,再使top指针-1;
注:出栈只是栈顶指针改变,元素还在数组内。
五、顺序栈的创建和出栈并输出
在了解了上面的内容后就可以进行栈的相关操作,入栈的创建和出栈并输出栈的元素。
1.顺序栈的创建
//创建栈 int CreateStack(Seqstack* s) { DataType e; InitStack(s); //初始化栈 printf("intput data:(输入a停止)\n"); while (scanf("%d", &e)) //循环输入数据并入 Push(s, e); return 1; }
栈的创建要先初始化栈,再通过进栈函数输入所需的数据。
2.顺序栈的出栈并输出栈中元素
void printStack(Seqstack* s) { DataType e; while (Pop(s, &e)) printf("%d ", e); }
用一个变量接受出栈函数带出的数据,并循环直到栈为空为止。
六、代码总览和运行结果
#define _CRT_SECURE_NO_WARNINGS 1 #define MAX 10 #include//定义数据类型 typedef int DataType; //栈的定义 typedef struct { DataType data[MAX]; //顺序栈的存储类型 int top; //记录栈顶的指针,在顺序栈中类似于数组下标 }Seqstack; //栈的初始化 void InitStack(Seqstack* s) { s->top = -1; //初始化栈顶指针为-1 } //判断栈是否为空 int EmptyStack(Seqstack* s) { if (s->top == -1) return 1; //若空返回1,非空返回0 else return 0; } //判断栈是否已满 int FullStack(Seqstack* s) { if(s->top==MAX-1) return 1; //若满返回1,非空返回0 else return 0; } //入栈 int Push(Seqstack* s,DataType x) { if (FullStack(s)) //调用函数判断栈是否已满 { printf("栈满,不可入栈!"); return 0; } else { s->top++; //将栈顶指针上一位 s->data[s->top] = x; return 1; } } //出栈 int Pop(Seqstack* s,DataType *x) { if (EmptyStack(s)) { return 0; } else { *x = s->data[s->top]; s->top--; return 1; } } //创建栈 int CreateStack(Seqstack* s) { DataType e; InitStack(s); //初始化栈 printf("intput data:(输入a停止)\n"); while (scanf("%d", &e)) //循环输入数据并入 Push(s, e); return 1; } //出栈并输出栈中元素 void printStack(Seqstack* s) { DataType e; while (Pop(s, &e)) printf("%d ", e); } int main() { Seqstack ss; printf("开始创建栈:\n"); CreateStack(&ss); printf("开始出栈并输出栈中元素:\n"); printStack(&ss); return 0; }