mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
添加 0225.用队列实现栈.md C 版本
This commit is contained in:
@ -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">
|
||||
|
Reference in New Issue
Block a user