C语言,假设以“只有表头指针没有表尾指针的循环单链表”作为链栈S的存储结构(类型为StackNode),请写出进栈与出栈的操作语句。
时间: 2024-12-02 21:22:18 浏览: 15
数据结构链栈的基本操作的实现.cpp
5星 · 资源好评率100%
在C语言中,如果链栈S采用的是"只有表头指针没有表尾指针"的循环单链表结构(例如StackNode类型的节点),我们可以创建如下的操作:
### 进栈 (Push) 操作:
```c
void push(StackNode **top, int value) {
// 如果链表为空,则创建新的节点并设置为头结点
if (*top == NULL) {
StackNode *new_node = malloc(sizeof(StackNode));
new_node->data = value;
new_node->next = *top; // 创建循环链表
*top = new_node;
}
// 否则,在当前头结点上添加新元素
else {
StackNode *current = *top;
current->next->data = value; // 更新节点值
current->next = current->next->next; // 链接到下一个节点形成循环
}
}
```
### 出栈 (Pop) 操作:
```c
int pop(StackNode **top) {
// 检查链表是否为空
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者返回错误代码
}
// 保存要删除的元素
int popped_value = (*top)->data;
// 将头结点链接到下一个节点,移除当前头结点
StackNode *temp = *top;
*top = (*top)->next;
// 释放已删除节点的内存
free(temp);
return popped_value;
}
```
记得处理空栈的情况,以上操作都假设`push`和`pop`函数有对链表头指针的引用,并且`malloc`和`free`已经成功完成。
阅读全文