真的非常非常基础,甚至我都不会写指针的实现栈顶和栈基的表示
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 10
#define ERROR 1
#define PASS 1
#define OK 0
typedef struct Slist//本栈用整型数字来表示栈基和栈顶
{
int list[MAXLENGTH];
int top;//表示栈的顶层,不得大于MAXLENGTH+1,如果为-1,说明为空栈
}Slist,*Slistp;//定义两个名称,一个是直接表示栈,另一个则是表示指针指向栈的入口
int InitStack(Slistp *S){//用于新建一个空栈,由于传入的为栈的地址,所以在使用栈时必须先解引
if (!(*S)) return ERROR;//如果新建空栈失败,返回ERROR
(*S) =(Slistp) malloc(sizeof(Slist));//分配空间,将其实例化
for(int i = 0;i<MAXLENGTH-1;i++){
(*S)->list[i] = 0;
}
(*S)->top = -1;//堆栈空
}
int Push(Slistp *S,int insert){//用于在栈顶插入数据
if ((*S)->top == (MAXLENGTH-1)){
printf("栈满");
return PASS;//检测为栈满
}
(*S)->top++;//栈顶上移一个单位
int i = (*S)->top;
(*S)->list[i] = insert;//加入新的数据
return OK;
}
int Pop(Slistp *S){//用于删除栈顶数据,并返回删除的值
if ((*S)->top == -1) return ERROR;//如果栈空,返回错误
int i = (*S)->top;//获取栈顶位置
(*S)->list[i] = 0;//将栈顶数据删除,并设置为零
(*S)->top--;//栈顶下调一个单位
return OK;
}
int ShowStack(Slistp *S){//用于输出栈内储存数据
int i = 0;
for(i = 0;i<MAXLENGTH-1;i++){
printf("%d,",(*S)->list[i]);
}
}
int main(){
Slist S;
InitStack(&S);
Push(&S,1);
Push(&S,2);
Push(&S,3);
Pop(&S);
ShowStack(&S);
system("pause");
}
第一次写了这么多注释,写了好久,我好菜....干巴爹!
如有错误,恳请指正,感谢您的浏览ovo