1.数据结构学习模式
学习一种数据结构时,总是从下述三个方面展开:
(1)逻辑结构:是从逻辑关系上描述数据,可看作上从具体问题中抽象出来的数据模型,
与计算机存储无关。
(2)存储结构:是逻辑结构在存储器中的实现。
(3)数据操作:是定义在数据逻辑结构上的一组运算。
2.栈知识总结
栈的操作特点是“先进后出”,可以想象成是一个往里面装物品的容器,插入和删除都在同一端,称为“栈顶”,另一端不能操作,称为“栈底”。栈最常用的操作是入栈(输入数据),出栈(输出数据)。
实现效果如图![](https://img-blog.csdnimg.cn/456e925f73a94db3999aab8c77b4e724.png)
实现代码如下
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 3
typedef struct
{
int array[MAXSIZE];
int stacksize;
int *base,*top;
}SqStack;
void printStar() //连续输入几十个*,用来设计虚拟界面的边框
{
int i;
for(i=0;i<70;i++)
printf("*");
printf("\n");
}
void menu() //因为C语言无法创建可视化界面,因此这里创建一个虚拟的界面,方便用户操作
{
printStar();
printf("\t\t\t欢迎进入顺序栈操作界面!\n");
printf("请从键盘输入数字,完成对应的操作(1到7为有效操作,输入其他退出程序)\n");
printf("\t 1.初始化顺序栈\n");
printf("\t 2.判断栈是否为空\n");
printf("\t 3.判断栈是否为满\n");
printf("\t 4.入栈\n");
printf("\t 5.出栈\n");
printf("\t 6.取栈顶元素\n");
printf("\t 7.输出该顺序栈\n");
printStar();
}
void InitStack(SqStack *S){
//<------将此处代码补充完整
int *q;
q = &S->array[0];
S->base = S->top = q;
S->stacksize = 0;
printf("顺序栈初始化成功!\n");
}
void StackEmpty(SqStack *S)
{
if(S->base == S->top){
printf("顺序栈为空\n");
}
else printf("顺序栈不为空\n");
}
void StackFull(SqStack *S)
{
if(S->top-S->base == MAXSIZE){
printf("顺序栈为满\n");
}
else printf("顺序栈不为满\n");
}
void Push(SqStack *S,int n){
printf("请输入要入栈的元素: \n");
scanf("%d", &n);
if(S->top - S->base == MAXSIZE){
printf("顺序栈为满!请出栈后再入栈\n");
}
else{
//<------将此处代码补充完整
S->array[S->stacksize] = n;
S->stacksize++;
S->top++;
printf("入栈完毕\n");
}
}
void Pop(SqStack *S){
int x;
if(S->base == S->top){
printf("顺序栈为空!请入栈后再出栈\n");
}
else{
//<------将此处代码补充完整
x= S->array[S->stacksize-1];
S->stacksize--;
S->top--;
printf("出栈元素为:%d\n",x);
}
}
void GetTop(SqStack *S){
int x;
if(S->base == S->top){
printf("顺序栈为空!请入栈后再取栈顶元素\n");
}
else{
//<------将此处代码补充完整
x= S->array[S->stacksize-1];
S->stacksize--;
S->top--;
printf("栈顶元素为:%d\n",x);
}
}
void Output(SqStack *S){
int i;
if(S->base == S->top){
printf("顺序栈为空!\n");
}
else{
printf("输出顺序栈:");
for(i=0;i<S->stacksize;i++){
printf("%d ",S->array[i]);
}
}
}
void main(){
SqStack S;
int select,n,x,flag=1;
menu();
while(flag==1){
printf("您选择的操作是:");
fflush(stdin);
scanf("%d",&select);
switch(select){
case 1: InitStack(&S);
printf("\n");
break;
case 2: StackEmpty(&S);
printf("\n");
break;
case 3: StackFull(&S);
printf("\n");
break;
case 4: Push(&S,n);
printf("\n");
break;
case 5: Pop(&S);
printf("\n");
break;
case 6: GetTop(&S);
printf("\n");
break;
case 7: Output(&S);
printf("\n");
break;
//<------将此处代码补充完整
default:printf("您选择退出程序,欢迎下次光临!\n");
flag = 0;
}
}
printf("\n");
system("pause");
}