某一线性数据结构的数据集中的元素数据为不同城市的省会及其位置,数据元素类型定义为: typedef struct{ int city_id; double x; double y; double z; } ElemType; 通过创建链栈记录数据集,并实现销毁、入栈、出栈和获取栈顶元素的C语言代码实现。
时间: 2023-06-07 18:11:47 浏览: 79
以下是针对您的问题所编写的代码实现:
// 定义栈节点结构体
typedef struct StackNode {
ElemType data;
struct StackNode *next;
} StackNode, *LinkStackPtr;
// 定义链栈结构体
typedef struct LinkStack {
LinkStackPtr top;
int count;
} LinkStack;
// 初始化链栈
void initStack(LinkStack *s) {
s->top = NULL;
s->count = 0;
}
// 销毁链栈
void destroyStack(LinkStack *s) {
LinkStackPtr p;
while (s->top != NULL) {
p = s->top;
s->top = p->next;
free(p);
}
s->count = 0;
}
// 入栈操作
int push(LinkStack *s, ElemType e) {
LinkStackPtr p = (LinkStackPtr) malloc(sizeof(StackNode));
if (p == NULL) {
return 0;
}
p->data = e;
p->next = s->top;
s->top = p;
s->count++;
return 1;
}
// 出栈操作
int pop(LinkStack *s, ElemType *e) {
LinkStackPtr p;
if (s->top == NULL) {
return 0;
}
*e = s->top->data;
p = s->top;
s->top = p->next;
free(p);
s->count--;
return 1;
}
// 获取栈顶元素
int getTop(LinkStack *s, ElemType *e) {
if (s->top == NULL) {
return 0;
}
*e = s->top->data;
return 1;
}
// 测试入口
int main() {
LinkStack s;
ElemType e;
// 初始化链栈
initStack(&s);
// 入栈操作
e.city_id = 1;
e.x = 12.34;
e.y = 56.78;
e.z = 90.12;
push(&s, e);
// 出栈操作
pop(&s, &e);
// 获取栈顶元素
getTop(&s, &e);
// 销毁链栈
destroyStack(&s);
return 0;
}
阅读全文