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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用C语言来实现顺序栈静态分配。下面是一个简单的示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 typedef struct { int data[MAX_SIZE]; int top; } SeqStack; // 初始化 void initStack(SeqStack *stack) { stack->top = -1; } // 判断是否为空 int isEmpty(SeqStack *stack) { return (stack->top == -1); } // 判断是否已满 int isFull(SeqStack *stack) { return (stack->top == MAX_SIZE - 1); } // 入 void push(SeqStack *stack, int item) { if (isFull(stack)) { printf("Stack is full!\n"); return; } stack->top++; stack->data[stack->top] = item; } // 出 int pop(SeqStack *stack) { if (isEmpty(stack)) { printf("Stack is empty!\n"); return -1; } int item = stack->data[stack->top]; stack->top--; return item; } // 获取顶元素 int peek(SeqStack *stack) { if (isEmpty(stack)) { printf("Stack is empty!\n"); return -1; } return stack->data[stack->top]; } int main() { SeqStack stack; initStack(&stack); push(&stack, 1); push(&stack, 2); push(&stack, 3); printf("Top element: %d\n", peek(&stack)); int item = pop(&stack); printf("Popped element: %d\n", item); printf("Top element: %d\n", peek(&stack)); return 0; } ``` 这段代码实现了顺序栈静态分配。首先定义了一个结构体 `SeqStack`,其中包含一个整型数组 `data` 用于存储中的元素,以及一个整型变量 `top` 用于表示顶的索引。然后定义了一系列操作函数来进行的初始化、判空、判满、入、出和获取顶元素等操作。 在 `main` 函数中,首先初始化了一个 `stack`,然后依次将元素 1、2 和 3 入,并打印顶元素。接着进行一次出操作,并打印出的元素和新的顶元素。最后返回 0 表示程序正常结束。 注意:这只是一个简单的示例代码,实际应用中可能还需要进行错误处理、动态扩容等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值