栈怎么编程c

时间:2025-01-24 17:21:36 网络游戏

在C语言中,栈可以通过数组或链表来实现。以下是使用数组实现栈的示例代码:

```c

include

include

include

define MAX_SIZE 100

typedef struct {

int data[MAX_SIZE];

int top;

} Stack;

// 初始化栈

void init(Stack *s) {

s->top = -1;

}

// 压栈操作

void push(Stack *s, int value) {

if (s->top == MAX_SIZE - 1) {

printf("Stack overflow!\n");

return;

}

s->data[++s->top] = value;

}

// 弹栈操作

int pop(Stack *s) {

if (s->top >= 0) {

return s->data[s->top--];

} else {

printf("Stack is empty!\n");

return -1;

}

}

// 获取栈顶元素

int top(Stack *s) {

if (s->top >= 0) {

return s->data[s->top];

} else {

printf("Stack is empty!\n");

return -1;

}

}

// 判断栈是否为空

int isEmpty(Stack *s) {

return s->top == -1;

}

// 获取栈的大小

int size(Stack *s) {

return s->top + 1;

}

int main() {

Stack s;

init(&s);

push(&s, 1);

push(&s, 2);

push(&s, 3);

printf("Top element is: %d\n", top(&s));

printf("Popped element is: %d\n", pop(&s));

printf("Stack size is: %d\n", size(&s));

return 0;

}

```

代码解释

结构体定义

`Stack`结构体包含一个整数数组`data`和一个整数`top`,`top`表示栈顶的位置。

初始化函数

`init(Stack *s)`函数将栈的`top`初始化为-1,表示栈为空。

压栈操作

`push(Stack *s, int value)`函数将一个整数`value`压入栈顶。如果栈已满(即`top`等于`MAX_SIZE - 1`),则输出"Stack overflow!"。

弹栈操作

`pop(Stack *s)`函数从栈顶弹出一个元素并返回它。如果栈为空(即`top`小于0),则输出"Stack is empty!"并返回-1。

获取栈顶元素

`top(Stack *s)`函数返回栈顶的元素,但不移除它。如果栈为空,则输出"Stack is empty!"并返回-1。

判断栈是否为空

`isEmpty(Stack *s)`函数检查栈是否为空,即`top`是否等于-1。

获取栈的大小

`size(Stack *s)`函数返回栈中元素的个数。

主函数

`main()`函数演示了如何使用上述函数进行栈的基本操作,包括初始化栈、压栈、弹栈、获取栈顶元素和判断栈是否为空。

通过上述代码,你可以实现一个简单的栈,并进行基本的栈操作。根据具体需求,你还可以扩展这个实现,例如添加动态扩容功能或使用链表实现栈。