c语言代码,新建一个顺序栈,栈中每个元素的属性有id和name,实现入栈和出栈等操作
时间: 2024-10-22 18:05:21 浏览: 33
在C语言中,我们可以创建一个简单的顺序栈结构(基于数组实现),用于存储具有'id'和'name'属性的元素。下面是一个基础的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int capacity;
int top; // 栈顶指针
char *ids;
char **names; // 为了存储名字,这里用动态内存分配
} Stack;
// 初始化栈
Stack* createStack(int capacity) {
Stack *stack = (Stack*)malloc(sizeof(Stack));
stack->capacity = capacity;
stack->top = -1;
stack->ids = (char*)malloc(capacity * sizeof(char)); // id部分
stack->names = (char**)malloc(capacity * sizeof(char*)); // name部分
for (int i = 0; i < capacity; i++) {
stack->names[i] = NULL;
}
return stack;
}
// 入栈(添加新元素)
void push(Stack *stack, int id, char *name) {
if (stack->top >= stack->capacity - 1) { // 检查是否已满
printf("Stack is full.\n");
return;
}
stack->ids[++stack->top] = id;
stack->names[stack->top] = (char*)malloc(strlen(name) + 1); // 分配空间
strcpy(stack->names[stack->top], name);
}
// 出栈(删除并返回顶部元素)
void pop(Stack *stack) {
if (stack->top == -1) { // 判断是否为空
printf("Stack is empty.\n");
return;
}
free(stack->names[stack->top]); // 释放名字空间
stack->names[stack->top] = NULL;
stack->top--;
}
// 遍历栈打印元素
void printStack(Stack *stack) {
for (int i = 0; i <= stack->top; i++) {
printf("ID: %d, Name: %s\n", stack->ids[i], stack->names[i]);
}
}
// 错误处理和清理
void destroyStack(Stack *stack) {
for (int i = 0; i <= stack->top; i++) {
free(stack->names[i]);
}
free(stack->names);
free(stack->ids);
free(stack);
}
int main() {
Stack *stack = createStack(5);
// 示例入栈
push(stack, 1, "Element1");
push(stack, 2, "Element2");
// 示例出栈
pop(stack);
// 打印栈
printStack(stack);
// 清理
destroyStack(stack);
return 0;
}
```
这个示例展示了如何创建一个顺序栈,并实现了基本的入栈、出栈和遍历功能。请注意,在实际应用中,为了更好地管理内存,你可以考虑使用链表或其他数据结构替代数组。
阅读全文