帮我写一段c语言代码,顺序栈每个元素的属性有id和name,实现入栈和出栈
时间: 2024-10-13 20:05:19 浏览: 32
当然,这里是一个简单的顺序栈结构(数组实现),以及入栈(push)和出栈(pop)的基本操作。我们将使用两个指针(top 和 base)来跟踪栈的状态。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10 // 栈的最大容量
// 定义栈结构体
typedef struct {
int id[MAX_SIZE];
char name[MAX_SIZE][50]; // 假设名字最大长度为49(包括null终止符)
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1; // 栈顶初始为空
}
// 入栈 (push)
void push(Stack *s, int id, const char *name) {
if (s->top >= MAX_SIZE - 1) {
printf("Stack overflow.\n");
return;
}
s->top++;
s->id[s->top] = id;
strncpy(s->name[s->top], name, sizeof(s->name[0])); // 注意字符串结束符
}
// 出栈 (pop)
int pop(Stack *s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1; // 返回-1表示空栈
}
int id = s->id[s->top];
char *name = s->name[s->top];
s->top--;
return id;
}
// 测试栈
int main() {
Stack myStack;
init(&myStack);
push(&myStack, 1, "Alice");
push(&myStack, 2, "Bob");
int poppedId = pop(&myStack);
if (poppedId != -1) {
printf("Popped element's ID: %d\n", poppedId);
}
return 0;
}
```
在这个代码里,我们首先初始化栈,然后进行入栈和出栈操作。注意,对于字符串的存储,`strncpy`用于防止溢出,因为它只复制到第一个null字符的位置。
阅读全文