提示信息

C语言实现的顺序栈基本操作

缱绻时 已关注

在C语言中,顺序栈(或称为数组栈)是通过数组实现的栈结构。栈是一种后进先出(LIFO, Last In First Out)的数据结构,基本操作包括:

  1. 初始化栈
  2. 判断栈是否为空
  3. 判断栈是否为满
  4. 入栈(Push)
  5. 出栈(Pop)
  6. 取栈顶元素

下面是一个基本的C语言实现示例:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX_SIZE 100 // 定义栈的最大容量
  4. typedef struct {
  5. int data[MAX_SIZE]; // 用数组存储栈元素
  6. int top; // 栈顶指针
  7. } Stack;
  8. // 初始化栈
  9. void initStack(Stack *s) {
  10. s->top = -1; // 栈顶指针初始为-1,表示栈为空
  11. }
  12. // 判断栈是否为空
  13. int isEmpty(Stack *s) {
  14. return s->top == -1;
  15. }
  16. // 判断栈是否为满
  17. int isFull(Stack *s) {
  18. return s->top == MAX_SIZE - 1;
  19. }
  20. // 入栈操作
  21. int push(Stack *s, int value) {
  22. if (isFull(s)) {
  23. printf("栈已满,无法入栈。\n");
  24. return 0;
  25. }
  26. s->data[++(s->top)] = value; // 将元素压入栈顶
  27. return 1;
  28. }
  29. // 出栈操作
  30. int pop(Stack *s, int *value) {
  31. if (isEmpty(s)) {
  32. printf("栈为空,无法出栈。\n");
  33. return 0;
  34. }
  35. *value = s->data[(s->top)--]; // 弹出栈顶元素
  36. return 1;
  37. }
  38. // 取栈顶元素
  39. int peek(Stack *s, int *value) {
  40. if (isEmpty(s)) {
  41. printf("栈为空,没有栈顶元素。\n");
  42. return 0;
  43. }
  44. *value = s->data[s->top];
  45. return 1;
  46. }
  47. // 示例使用
  48. int main() {
  49. Stack s;
  50. initStack(&s);
  51. push(&s, 10);
  52. push(&s, 20);
  53. push(&s, 30);
  54. int value;
  55. if (pop(&s, &value)) {
  56. printf("出栈元素: %d\n", value);
  57. }
  58. if (peek(&s, &value)) {
  59. printf("当前栈顶元素: %d\n", value);
  60. }
  61. return 0;
  62. }

说明:

  • initStack:初始化栈,将栈顶指针设为-1,表示栈为空。
  • isEmpty:检查栈是否为空,通过判断top是否为-1。
  • isFull:检查栈是否为满,通过判断top是否等于MAX_SIZE-1
  • push:将元素压入栈顶。若栈满则无法入栈。
  • pop:弹出栈顶元素,若栈空则无法出栈。
  • peek:获取栈顶元素而不弹出(栈状态不变),若栈空则无法获取。

注意要根据实际应用选择合适的栈容量MAX_SIZE

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
缱绻时 关注 已关注

最近一次登录:2024-11-20 21:17:05   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图