mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 07:35:35 +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">
|
<p align="center">
|
||||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||||
|
Reference in New Issue
Block a user