使用动态分配内存的形式,构建一个其中元素数据类型为float的栈。 2.将数据3.14,5.26,7.89,4.67,5.2,7.9,5.5依次压入栈中。 3.每次压栈完成后,立即获取栈顶元素并输出。 4.使用循环的形式进行出栈,直至栈为空。用c语言
时间: 2024-10-24 17:03:29 浏览: 19
数据结构期末复习提要 (2).pdf
在C语言中,我们可以使用链表结合结构体来构建一个动态分配内存的栈,其中包含float类型的元素。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构
typedef struct {
float data;
struct Node *next;
} StackNode;
// 定义栈结构体
typedef struct {
StackNode* top;
int size;
} Stack;
// 初始化栈
Stack* createStack() {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->top = NULL;
stack->size = 0;
return stack;
}
// 动态分配内存并压栈
void push(Stack* stack, float value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = stack->top;
stack->top = newNode;
stack->size++;
}
// 获取栈顶元素并弹栈(如果栈非空)
float pop(Stack* stack) {
if (stack->top == NULL) {
printf("Stack is empty!\n");
return -1; // 返回特殊值表示栈空
}
float data = stack->top->data;
StackNode* temp = stack->top;
stack->top = stack->top->next;
free(temp);
stack->size--;
return data;
}
int main() {
Stack* myStack = createStack();
// 将数据压入栈
for (int i = 0; i < 7; i++) {
push(myStack, static_cast<float>(i * 10 + 3)); // 示例数据,实际替换为3.14, 5.26, ... 等
printf("Pushed %f to the stack, current top: %f\n", i * 10 + 3, pop(myStack));
}
// 循环出栈直到栈空
while (!isEmpty(myStack)) { // 自己实现 isEmpty() 函数检查栈是否为空
float poppedValue = pop(myStack);
if (poppedValue != -1) {
printf("Popped: %f\n", poppedValue);
} else {
break;
}
}
// 清理栈和释放内存
free(myStack);
return 0;
}
```
在这个例子中,我们首先创建了一个栈结构,并通过`push`函数将数值推入栈中。然后使用`pop`函数获取栈顶元素并在打印之后弹出,这个过程持续到栈变为空。请注意,`isEmpty()`函数在这里未给出,你需要自己实现一个检查栈是否为空的方法。
阅读全文