用C语言编写一个程序,写一个可以返回栈s中结点个数的算法
时间: 2024-09-25 14:21:19 浏览: 49
在C语言中,要编写一个返回栈(stack)中结点个数的函数,我们可以创建一个栈结构体,并维护一个计数器来记录当前栈顶的节点数量。这里是一个简单的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体,包含一个数据域和一个指向栈顶的指针
typedef struct StackNode {
int data; // 存储的数据
struct StackNode* top;
} Stack;
// 初始化一个新栈
Stack* createStack() {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->top = NULL;
return s;
}
// 向栈中添加元素
void push(Stack* s, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->top = s->top;
s->top = newNode;
}
// 返回栈中结点个数
int getStackSize(Stack* s) {
if (s->top == NULL) { // 栈为空
return 0;
} else {
return (s- s->top->top); // 计算距离栈底的节点数
}
}
// 主函数示例
int main() {
Stack* s = createStack();
push(s, 1);
push(s, 2);
push(s, 3);
int stackSize = getStackSize(s);
printf("栈中有 %d 个节点\n", stackSize);
free(s->top);
free(s);
return 0;
}
```
这个程序首先创建一个栈并添加一些元素。`getStackSize` 函数检查栈是否为空,然后通过计算 `top` 指针与 `top->top` 指针之间的距离得出节点数。注意,在实际应用中,需要处理内存分配和释放,上述代码中已经包含了基本的内存管理。
阅读全文