用c语言实现查找栈尾部元素,并从尾部删除元素的操作
时间: 2024-05-09 18:21:21 浏览: 10
可以使用链表来实现栈,每次从头节点开始遍历找到尾节点,然后删除尾节点即可。具体实现可以参考以下代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node{
int data;
struct Node *next;
} Node;
// 初始化链表
void init(Node **head) {
*head = (Node*)malloc(sizeof(Node));
(*head)->next = NULL;
}
// 入栈
void push(Node *head, int data) {
Node *p = (Node*)malloc(sizeof(Node));
p->data = data;
p->next = head->next;
head->next = p;
}
// 出栈
int pop(Node *head) {
if(head->next == NULL) {
printf("栈为空!");
return -1;
}
int data = head->next->data;
Node *p = head->next;
head->next = p->next;
free(p);
return data;
}
// 查找栈尾元素并删除
void findAndRemoveTail(Node *head) {
Node *p = head;
while(p->next->next != NULL) {
p = p->next;
}
int data = p->next->data;
free(p->next);
p->next = NULL;
printf("栈尾元素为:%d\n", data);
}
int main() {
Node *head;
init(&head);
push(head, 1);
push(head, 2);
push(head, 3);
findAndRemoveTail(head);
pop(head);
pop(head);
pop(head);
pop(head);
return 0;
}
```
输出结果为:
```
栈尾元素为:1
栈为空!
```
相关推荐
![](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)