#define MAXSIZE 100
#include <stdio.h>
#include<cstdlib>
typedef struct {
int data;
}Elemtype;
//动态分配
typedef struct {
Elemtype* base;
Elemtype* top;
int stacksize;
}Sqstack;
//静态分配
//typedef struct {
// Elemtype data[MAXSIZE];
// int next;
//}Sqstack;
void InitStack(Sqstack& S);
void Stackempty(Sqstack S);
void Stacklength(Sqstack S);
void Stackclear(Sqstack& S);
void Stackdelete(Sqstack& S);
void Stackcener(Sqstack& S,int n);
void printf(Sqstack S);
int main() {
Sqstack M;
int m;
printf("please input your stack's length!");
scanf_s("%d", &m);
InitStack(M);
Stackempty(M);
Stackcener(M,m);
printf(M);
Stackempty(M);
Stacklength(M);
}
//栈的初始化
void InitStack(Sqstack& S) {
//S.base = new Elemtype[MAXSIZE];
S.base = (Elemtype*)malloc(MAXSIZE * sizeof(Elemtype));//为新的数组分配地址空间,因为他是顺序表
S.top = S.base;
S.stacksize = MAXSIZE;
}
//判断是否为空
void Stackempty(Sqstack S) {
if (S.top == S.base)//头指针尾指针指到一起,就是栈为空
printf("stack is empty!\n");
else
printf("stack is not empty!\n");
}
//求顺序表的表长,就可以用top指针减去base指针
void Stacklength(Sqstack S) {
int x;
x = S.top - S.base;
printf("stack's length is %d\n", x);
}
//清空栈,就是将指针重新指到原位
void Stackclear(Sqstack& S) {
if (S.base)
S.top = S.base;
printf("stack is clear out!");
}
//栈的销毁
void Stackdelete(Sqstack& S) {
delete S.base;
S.stacksize = 0;
S.base = S.top;//????
}
void Stackcener(Sqstack& S,int n) {
if (S.top - S.base == S.stacksize)
printf("stack is full!\n");
for (int i = 0; i <n; i++) {
printf("please input %d number\n", i + 1);
scanf_s("%d", &*S.top);
S.top++;
}
}
void printf(Sqstack S) {
int a = S.top - S.base;
printf("current stack is \n");
for (int j = 0; j < a; j++) {
printf(" %d", (*(S.base + j)).data);
}
printf("\n");
}
数据结构笔记2——顺序栈
最新推荐文章于 2024-07-22 19:36:52 发布