请用c语言实现对链栈的以下操作:初始化栈;按顺序将3 55 2 99 7 32 66和你的学号后三位进栈,输出栈长并遍历输出栈内元素;两元素出栈,输出栈长并输出出栈元素;判断栈是否为空,不空的话就取栈顶元素,并输出。调用链栈操作,写成算法,把学号换成8进制数输出
时间: 2024-10-24 16:05:10 浏览: 35
在C语言中,我们可以使用结构体和指针来实现链栈。首先,我们需要定义一个节点结构和链栈结构。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 链栈结构
typedef struct Stack {
Node* top;
int size; // 栈长度
} Stack;
// 初始化栈
void initStack(Stack* stack) {
stack->top = NULL;
stack->size = 0;
}
// 向栈中压入元素(后三位学号转为8进制)
void push(int num, Stack* stack) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = num % 1000; // 取后三位作为数据
newNode->next = stack->top;
stack->top = newNode;
stack->size++;
}
// 输出栈内容并计算长度
void printStack(const Stack* stack) {
printf("Stack elements: ");
Node* temp = stack->top;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
printf("Stack length: %d\n", stack->size);
}
// 出栈两个元素
void popTwo(Stack* stack) {
if (stack->size >= 2) {
Node* poppedOne = stack->top;
stack->top = stack->top->next;
free(poppedOne);
if (stack->top != NULL) {
Node* poppedTwo = stack->top;
stack->top = stack->top->next;
free(poppedTwo);
stack->size -= 2;
} else {
stack->size--;
}
} else {
printf("Stack is too small to pop two elements.\n");
}
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->top == NULL;
}
// 主函数示例
int main() {
Stack stack;
initStack(&stack);
// 入栈元素
push(3, &stack); // 学号300
push(55, &stack); // 学号550
push(2, &stack); // 学号200
push(99, &stack); // 学号990
push(7, &stack); // 学号700
push(32, &stack); // 学号320
push(66, &stack); // 学号660
// 输出栈信息
printStack(&stack);
// 出栈并打印结果
popTwo(&stack);
printStack(&stack);
// 判断栈是否为空
if (!isEmpty(&stack)) {
printf("Stack top element: %d\n", stack.top->data);
}
return 0;
}
```
这个程序实现了链栈的基本操作,包括初始化、入栈、出栈和判断栈空。注意,由于题目没有明确要求输入学号的8进制形式,所以直接取了后三位作为数字。如果需要转换为8进制,可以在`push`函数中添加适当的转换逻辑。
阅读全文