栈的实现及基本操作
时间: 2023-10-11 19:08:18 浏览: 26
栈是一种线性数据结构,它的特点是先进后出(Last In First Out, LIFO)。栈的实现可以使用数组或链表。
以下是栈的基本操作:
1. Push:向栈中压入一个元素。如果栈已满,则无法压入元素。
2. Pop:从栈中弹出一个元素。如果栈为空,则无法弹出元素。
3. Top:获取栈顶元素,但不弹出。
4. IsEmpty:检查栈是否为空。
5. IsFull:检查栈是否已满。
6. Size:获取栈中元素的个数。
下面是使用数组实现栈的示例代码:
```
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void Push(Stack* s, int element) {
if (s->top >= MAX_SIZE) {
printf("Stack overflow\n");
return;
}
s->data[++s->top] = element;
}
int Pop(Stack* s) {
if (s->top < 0) {
printf("Stack underflow\n");
return -1;
}
return s->data[s->top--];
}
int Top(Stack* s) {
if (s->top < 0) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top];
}
int IsEmpty(Stack* s) {
return s->top < 0;
}
int IsFull(Stack* s) {
return s->top >= MAX_SIZE;
}
int Size(Stack* s) {
return s->top + 1;
}
```
使用链表实现栈的示例代码:
```
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} Stack;
void Push(Stack* s, int element) {
Node* node = (Node*) malloc(sizeof(Node));
node->data = element;
node->next = s->top;
s->top = node;
}
int Pop(Stack* s) {
if (s->top == NULL) {
printf("Stack underflow\n");
return -1;
}
Node* node = s->top;
int data = node->data;
s->top = node->next;
free(node);
return data;
}
int Top(Stack* s) {
if (s->top == NULL) {
printf("Stack is empty\n");
return -1;
}
return s->top->data;
}
int IsEmpty(Stack* s) {
return s->top == NULL;
}
int Size(Stack* s) {
int size = 0;
Node* node = s->top;
while (node != NULL) {
size++;
node = node->next;
}
return size;
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)