C语言实现栈的操作,压栈出栈(代码详细讲解)

1、栈的顺序存储结构:
其结构定义如下:

typedef int SElemType;
typedef struct{
                         //栈的结构定义
	SElemType data[MAXSIZE];
	int top;                       //用于栈顶指针
}SqStack;

假设现在有一个栈,StackSize 是5,则栈普通情况、空栈和满栈的情况示意图如图:
C语言实现栈的操作,压栈出栈(代码详细讲解)_第1张图片
1.2栈的顺序存储结构-进栈操作
C语言实现栈的操作,压栈出栈(代码详细讲解)_第2张图片
插入元素e为新的栈顶元素

1.2栈的顺序存储结构-出栈操作

Status Pop(SqStack *S, SElemType *e){
        //传入栈的地址和弹出元素保存变量e
	if (S -> top == -1)
		return false;
	*e = S -> data[S -> top];  //将要删除的栈顶元素赋值给e 
	S -> top--;                //栈顶指针减一
	return true;

}

完整代码:

#include
#include
#include   //malloc所在库

#define MAXSIZE 100  //宏定义不能加“;”,初始化栈的大小
//const int MAXSIZE = 100;

typedef int SElemType;
typedef bool Status; //状态参数

typedef struct{
                         //栈结构体
	SElemType data[MAXSIZE];
	int top;                       //栈指针
}SqStack;


Status Push(SqStack *S, SElemType e){
        //压栈函数
	if(S->top == MAXSIZE - 1)			//如果已经是满栈,状态返回false
		return false;
	S->top++;                           //栈指针+1
	S->data[S->top] = e;				//压栈
	return true;						//返回创建成功
}

Status Pop(SqStack *S, SElemType *e){
        //传入栈的地址和弹出元素保存变量e
	if (S -> top == -1)
		return false;
	*e = S -> data[S -> top];  //将要删除的栈顶元素赋值给e 
	S -> top--;                //栈顶指针减一
	return true;

}



int main(){
     
	
	SqStack *S = (SqStack *)malloc(sizeof(SqStack));	//申请内存空间,创建栈
	S -> top = -1;					//对栈顶top进行初始化,否则报错

	SElemType e = 5;					//创建待压栈元素e
	Push(S, e);							//调用压栈函数


	free(S);							//释放内存
	return 0;
}

你可能感兴趣的:(c++,栈)