数据结构中的入栈出栈
时间: 2023-11-26 15:48:26 浏览: 85
数据结构栈的输入与输出
4星 · 用户满意度95%
栈是一种常见的数据结构,它具有后进先出(Last In First Out,LIFO)的特点。在栈中,只能在栈顶进行插入和删除操作。插入操作称为入栈,删除操作称为出栈。下面分别介绍数组栈和链表栈的入栈和出栈操作:
1. 数组栈的入栈和出栈操作
数组栈的入栈操作:将元素插入到栈顶,即将元素放入数组的栈顶位置,同时将栈顶指针加1。
数组栈的出栈操作:将栈顶元素弹出,即将栈顶元素取出,同时将栈顶指针减1。
以下是数组栈的入栈和出栈操作的示例代码:
```c
#define Maxsize 100
typedef struct sqstack {
int data[Maxsize];
int top;
}SqStack;
// 入栈操作
int push(SqStack *s, int x) {
if (s->top == Maxsize - 1) { // 栈满
return 0;
}
s->top++;
s->data[s->top] = x;
return 1;
}
// 出栈操作
int pop(SqStack *s, int *x) {
if (s->top == -1) { // 栈空
return 0;
}
*x = s->data[s->top];
s->top--;
return 1;
}
```
2. 链表栈的入栈和出栈操作
链表栈的入栈操作:将元素插入到栈顶,即将元素作为链表的头节点,同时将头指针指向新的头节点。
链表栈的出栈操作:将栈顶元素弹出,即将头节点取出,同时将头指针指向下一个节点。
以下是链表栈的入栈和出栈操作的示例代码:
```c
typedef struct linknode {
int data;
struct linknode* next;}* LiStack;
// 入栈操作
int push(LiStack *s, int x) {
LiStack p = (LiStack)malloc(sizeof(struct linknode));
p->data = x;
p->next = *s;
*s = p;
return 1;
}
// 出栈操作
int pop(LiStack *s, int *x) {
if (*s == NULL) { // 栈空
return 0;
}
LiStack p = *s;
*x = p->data;
*s = p->next;
free(p);
return 1;
}
```
阅读全文