在C语言中,新建一个顺序栈,栈中每个元素的属性有id和name,实现入栈和出栈等操作。
时间: 2024-10-13 21:05:51 浏览: 27
在C语言中,你可以通过结构体定义栈的数据类型,然后创建对应的栈结构。首先,我们定义一个包含`id`和`name`的结构体:
```c
typedef struct {
int id;
char name[50]; // 假设名字长度不超过50个字符
} StackElement;
// 创建栈的定义
typedef struct {
StackElement* top; // 指向栈顶元素
int size; // 栈当前大小
int capacity; // 栈的最大容量
} Stack;
```
接下来,我们可以实现基本的栈操作,如初始化、入栈、出栈以及判断栈是否为空:
```c
// 初始化一个空栈
void initStack(Stack* stack) {
stack->top = NULL;
stack->size = 0;
stack->capacity = 10; // 设置初始容量为10
}
// 入栈操作
void push(Stack* stack, StackElement new_element) {
if (stack->size == stack->capacity) { // 如果已满
stack->capacity *= 2; // 扩容一倍
StackElement* temp = realloc(stack->top, sizeof(StackElement) * stack->capacity);
if (!temp) { // 内存分配失败处理
printf("Memory allocation failed.\n");
return;
}
stack->top = temp;
}
stack->top = (StackElement*)(((char*)stack->top) + sizeof(StackElement)); // 移动栈顶指针
stack->top->id = new_element.id;
strncpy(stack->top->name, new_element.name, sizeof(stack->top->name));
stack->size++;
}
// 出栈操作
StackElement pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return (StackElement){0, ""};
}
StackElement popped_element = stack->top->id, popped_name;
strncpy(popped_name, stack->top->name, sizeof(popped_name));
stack->top = (StackElement*)(((char*)stack->top) - sizeof(StackElement)); // 移动栈顶指针
stack->size--;
return popped_element;
}
// 判断栈是否为空
int isEmpty(Stack* stack) {
return stack->size == 0;
}
```
阅读全文