c语言 int top,顺序栈(C语言,静态栈)
代碼部分數組
#include
#include
#include
#define INITSIZE 4
#define INCREMENT 2
typedef struct stack {
int *base;
int top;
int size;
}STACK, *PSTACK;
void init(PSTACK);
bool is_empty(PSTACK);
bool is_full(PSTACK);
bool push(PSTACK, int);
void traverse(PSTACK);
bool pop(PSTACK, int *);
// 棧有效元素(節點)為top + 1
void clear(PSTACK);
void destroy(PSTACK);
void destroy(PSTACK p)
{
if (is_empty(p))
return;
free(p->base);
p->top = -1;
p->size = 0;
}
// 只是更新棧頂,棧所占內存還在
void clear(PSTACK p)
{
printf("清空棧\n");
if (is_empty(p))
return;
p->top = -1;
}
bool pop(PSTACK p, int *pVal)
{
printf("pop...");
if (is_empty(p)){
printf("棧空!\n");
return false;
}
*pVal = p->base[p->top--];
printf("成功 值為%d\n", *pVal);
return true;
}
void traverse(PSTACK p)
{
printf("遍歷(顯示順序棧頂=>棧底)\n");
if (is_empty(p)) {
printf("棧空!\n");
return;
}
for (int i=p->top; i >=0; --i) {
printf("%d\n", p->base[i]);
}
}
bool push(PSTACK p, int val)
{
printf("push %d", val);
if (is_full(p)) {
p->base = (int *)realloc(p->base, sizeof(int) * (INCREMENT + p->size));
p->size += INCREMENT;
if (! p->base) {
printf(" 棧滿自動擴展空間失敗!\n");
return false;
}
else
printf(" 棧滿自動擴展空間");
}
p->base[++p->top] = val;
printf(" 成功\n");
return true;
}
bool is_full(PSTACK p)
{
// 由于是數組下標從0開始
if (p->top == p->size - 1)
return true;
return false;
}
bool is_empty(PSTACK p)
{
if (p->top == -1)
return true;
return false;
}
void init(PSTACK p)
{
p->base = (int *)malloc(sizeof(int) * INITSIZE);
p->top = -1;
p->size = INITSIZE;
}
int main(void)
{
STACK S;
int val;
init(&S);
push(&S, 1);
push(&S, 2);
push(&S, 3);
push(&S, 4);
push(&S, 5);
push(&S, 6);
traverse(&S);
pop(&S, &val);
pop(&S, &val);
pop(&S, &val);
traverse(&S);
clear(&S);
return 0;
}
總結
以上是生活随笔為你收集整理的c语言 int top,顺序栈(C语言,静态栈)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs2017c语言程序添加图标,笔试编程
- 下一篇: c语言的简单题目,C语言的一些简单题目,