添加 0225.用队列实现栈.md C 版本

This commit is contained in:
C_W
2024-12-12 22:32:25 +11:00
parent c865c46a1a
commit d6f7f3adbc

View File

@ -1277,6 +1277,95 @@ impl MyStack {
}
```
### C:
> C单队列
```c
typedef struct Node {
int val;
struct Node *next;
} Node_t;
// 用单向链表实现queue
typedef struct {
Node_t *head;
Node_t *foot;
int size;
} MyStack;
MyStack* myStackCreate() {
MyStack *obj = (MyStack *)malloc(sizeof(MyStack));
assert(obj);
obj->head = NULL;
obj->foot = NULL;
obj->size = 0;
return obj;
}
void myStackPush(MyStack* obj, int x) {
Node_t *temp = (Node_t *)malloc(sizeof(Node_t));
assert(temp);
temp->val = x;
temp->next = NULL;
// 添加至queue末尾
if (obj->foot) {
obj->foot->next = temp;
} else {
obj->head = temp;
}
obj->foot = temp;
obj->size++;
}
int myStackPop(MyStack* obj) {
// 获取末尾元素
int target = obj->foot->val;
if (obj->head == obj->foot) {
free(obj->foot);
obj->head = NULL;
obj->foot = NULL;
} else {
Node_t *prev = obj->head;
// 移动至queue尾部节点前一个节点
while (prev->next != obj->foot) {
prev = prev->next;
}
free(obj->foot);
obj->foot = prev;
obj->foot->next = NULL;
}
obj->size--;
return target;
}
int myStackTop(MyStack* obj) {
return obj->foot->val;
}
bool myStackEmpty(MyStack* obj) {
return obj->size == 0;
}
void myStackFree(MyStack* obj) {
Node_t *curr = obj->head;
while (curr != NULL) {
Node_t *temp = curr->next;
free(curr);
curr = temp;
}
free(obj);
}
```
<p align="center">
<a href="https://programmercarl.com/other/kstar.html" target="_blank">