用C语言设计一个链式栈,可以存储十六进制数
时间: 2023-06-27 12:05:49 浏览: 140
以下是使用C语言设计的链式栈代码,可以存储十六进制数:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链式栈结构体
typedef struct StackNode {
int data; // 存储数据
struct StackNode* next; // 指向下一个节点的指针
} StackNode;
// 初始化栈
void initStack(StackNode** top) {
*top = NULL;
}
// 判断栈是否为空
int isEmpty(StackNode* top) {
return top == NULL;
}
// 入栈
void push(StackNode** top, int data) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = data;
newNode->next = *top;
*top = newNode;
}
// 出栈
int pop(StackNode** top) {
if (isEmpty(*top)) {
printf("Stack is empty!\n");
exit(1);
}
int data = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return data;
}
int main() {
StackNode* top;
initStack(&top);
// 十六进制数的存储
push(&top, 0x1234);
push(&top, 0xabcd);
push(&top, 0xef01);
// 十六进制数的取出
printf("0x%x\n", pop(&top));
printf("0x%x\n", pop(&top));
printf("0x%x\n", pop(&top));
return 0;
}
```
在这个示例中,我们首先定义了一个 `StackNode` 结构体,它包含了一个 `data` 成员(用于存储数据)和一个 `next` 成员(指向下一个节点的指针)。然后,我们定义了一些基本的栈操作函数,如 `initStack`、`isEmpty`、`push` 和 `pop`。在 `push` 函数中,我们将新节点插入到链表的头部,因此它将成为新的栈顶。在 `pop` 函数中,我们从链表的头部删除节点,并返回其数据。
在 `main` 函数中,我们创建了一个空栈,并使用 `push` 函数将三个十六进制数压入栈中。然后,我们使用 `pop` 函数按照后进先出(LIFO)的顺序将它们取出,并使用 `%x` 格式化符打印它们。
阅读全文