一、順序棧的定義:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//順序棧存儲空間的的初始分配量;
#define OVERFLOW -1
#define OK 1;
#define ERROR -1
#define MAX 100
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;//棧底指針;
SElemType *top;//棧頂指針;
int length;
int stacksize;//棧可用最大容量;
}SqStack;
二、順序棧的初始化:
算法步驟:
①為順序棧分配一個最大容量為MAXSIZE的數(shù)組空間,使base指向這段空間的基地址(棧底);
②棧頂指針top初始為base,表示棧為空;
③stacksize置為棧的最大容量MAXSIZE;
Status InitStack(SqStack &S)
{//構建一個空棧
S.base=(int*)malloc(MAXSIZE*sizeof(int));//為順序表動態(tài)分配一個最大容量為MAXSIZE的數(shù)組空間
if(!S.base) exit(OVERFLOW);//存儲分配失敗
S.top=S.base;//top初始為base,空棧
S.stacksize=MAXSIZE;//stacksize置為棧的最大容量MAXSIZE
return OK;
}
三、入棧:
算法步驟:
①判斷棧是否為滿,若滿則返回ERROR;
②將新元素壓入棧頂,棧頂指針+1;
Status Push(SqStack &S,SElemType e)
{//插入元素e為新的棧頂元素;
if(S.top-S.base==S.stacksize)//棧滿;
return ERROR;
*S.top++=e;//將元素e壓入棧頂,棧頂指針加1;
return OK;
}
四、出棧:
算法步驟:
①判斷棧是否空,若空則返回ERROR;
②棧頂指針減一,棧頂元素出棧;
Status Pop(SqStack &S)
{//從棧頂遍歷棧的值;
int e;
if(S.top==S.base)
return ERROR;//棧空;
e=*--S.top;//棧頂指針及減1,將棧頂元素賦給e;
return e;//返回e;
}
五、取棧頂元素:
算法步驟:
①判斷棧非空;文章來源:http://www.zghlxwxcb.cn/news/detail-723131.html
②返回棧頂值;文章來源地址http://www.zghlxwxcb.cn/news/detail-723131.html
SElemType GetTop(SqStack S)
{//返回S的棧頂元素,不修改棧頂指針;
if(S.top!=S.base)//棧非空;
return *(S.top-1);//返回棧頂元素的值,棧頂指針不變;
}
六、主函數(shù):
int main()
{
SqStack S;
InitStack(S);
printf("請輸入順序棧長度:");
int x;
scanf("%d",&x);
printf("請輸入元素:");
int e;
for (int i = 1; i <= x; i++) {
scanf("%d", &e);
Push(S, e);//入棧
}
for(int i=0;i<x;i++)
{
printf("%d ",Pop(S));//出棧
}
printf("\n");
printf("---------\n");
printf("棧頂元素為:");
printf("%d",GetTop(S));//取棧頂元素;
return 0;
}
七、完整代碼:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100//順序棧存儲空間的的初始分配量;
#define OVERFLOW -1
#define OK 1;
#define ERROR -1
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef struct
{
SElemType *base;//棧底指針;
SElemType *top;//棧頂指針;
int length;
int stacksize;//??捎米畲笕萘浚?}SqStack;
Status InitStack(SqStack &S)
{//構建一個空棧
S.base=(int*)malloc(MAXSIZE*sizeof(int));//為順序表動態(tài)分配一個最大容量為MAXSIZE的數(shù)組空間
if(!S.base) exit(OVERFLOW);//存儲分配失敗
S.top=S.base;//top初始為base,空棧
S.stacksize=MAXSIZE;//stacksize置為棧的最大容量MAXSIZE
return OK;
}
Status Push(SqStack &S,SElemType e)
{//插入元素e為新的棧頂元素;
if(S.top-S.base==S.stacksize)//棧滿;
return ERROR;
*S.top++=e;//將元素e壓入棧頂,棧頂指針加1;
return OK;
}
Status Pop(SqStack &S)
{//從棧頂遍歷棧的值;
int e;
if(S.top==S.base)
return ERROR;//棧空;
e=*--S.top;//棧頂指針及減1,將棧頂元素賦給e;
return e;//返回e;
}
SElemType GetTop(SqStack S)
{//返回S的棧頂元素,不修改棧頂指針;
if(S.top!=S.base)//棧非空;
return *(S.top-1);//返回棧頂元素的值,棧頂指針不變;
}
int main()
{
SqStack S;
InitStack(S);
printf("請輸入順序棧長度:");
int x;
scanf("%d",&x);
printf("請輸入元素:");
int e;
for (int i = 1; i <= x; i++) {
scanf("%d", &e);
Push(S, e);//入棧
}
for(int i=0;i<x;i++)
{
printf("%d ",Pop(S));//出棧
}
printf("\n");
printf("---------\n");
printf("棧頂元素為:");
printf("%d",GetTop(S));//取棧頂元素;
return 0;
}
到了這里,關于順序棧的初始化、構建、入棧,出棧和取棧頂元素的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!