某一线性数据结构的数据集中的元素数据为不同城市的省会及其位置,数据元素类型定义为: typedef struct{ int city_id; double x; double y; double z; } ElemType; 通过创建链栈记录数据集,并实现销毁、入栈、出栈和获取栈顶元素的C语言代码实现。
时间: 2023-06-07 07:12:11 浏览: 47
好的,我明白您的要求。根据您所提供的元素类型定义,可以按照以下方式实现单链栈的入栈、出栈和获取栈顶元素。
首先,在C语言中,我们需要定义一个栈结构体,它包含一个链表头,用于指向当前栈顶的节点,以及栈的大小。
```
typedef struct StackNode {
ElemType data;
struct StackNode *next;
} StackNode, *LinkStackPtr;
typedef struct {
LinkStackPtr top;
int size;
} LinkStack;
```
然后,我们可以实现入栈操作。每次插入元素时,我们创建一个新的节点,将新节点插入到链表的头部,并将栈顶指针top指向新节点。
```
Status Push(LinkStack *S, ElemType e) {
StackNode *p = (StackNode*)malloc(sizeof(StackNode));
p->data = e;
p->next = S->top;
S->top = p;
S->size++;
return OK;
}
```
接下来是出栈操作,每次出栈时,我们需要将栈顶元素从链表头部删除,并返回它的值,同时更新栈顶指针top的值。
```
Status Pop(LinkStack *S, ElemType *e) {
if (S->top == NULL) {
return ERROR;
}
StackNode *p = S->top;
*e = p->data;
S->top = p->next;
free(p);
S->size--;
return OK;
}
```
最后是获取栈顶元素的操作,也就是返回当前栈顶的值,但是不删除它。
```
Status GetTop(LinkStack *S, ElemType *e) {
if (S->top == NULL) {
return ERROR;
}
*e = S->top->data;
return OK;
}
```
除此之外,我们还需要实现一个销毁栈的操作,在栈不再使用时,释放所有节点的内存空间。
```
Status DestroyStack(LinkStack *S) {
StackNode *p, *q;
p = S->top;
while (p) {
q = p;
p = p->next;
free(q);
}
S->top = NULL;
S->size = 0;
return OK;
}
```
以上代码就是实现单链栈的基本操作,您可以参考并使用它们来操作您的线性数据结构。