#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
typedef struct __StackList_ts {
int value;
struct __StackList_ts* next;
} StackList_ts;
typedef struct __Stackt_ts {
int depth;
StackList_ts* head;
} Stack_ts;
static Stack_ts stack = {};
StackList_ts* StackList_new(int value)
{
StackList_ts* result = NULL;
result = (StackList_ts*)malloc(sizeof(StackList_ts));
result->value = value;
result->next = NULL;
return result;
}
void push(int element)
{
StackList_ts* node = NULL;
node = StackList_new(element);
node->next = stack.head;
stack.head = node;
stack.depth++;
}
int pop(void)
{
int result = 0;
StackList_ts* node = NULL;
if (stack.depth > 0) {
result = stack.head->value;
node = stack.head->next;
free(stack.head);
stack.head = node;
stack.depth--;
} else {
result = 0;
}
return result;
}
int top(void)
{
int result = 0;
if (stack.depth > 0) {
result = stack.head->value;
} else {
result = 0;
}
return result;
}
bool empty(void)
{
if (stack.depth == 0) {
return true;
} else {
return false;
}
}
char** simulate(char** order, int orderLen, int* returnSize ) {
char** result = NULL;
int len = 0;
int i=0, j=0;
char* s = NULL;
int temp=0, index=0;
*returnSize = 0;
for (i=0; i<orderLen; ++i) {
if (strcmp(order[i], "MTY") == 0) {
(*returnSize)++;
} else if (strcmp(order[i], "TOP") == 0) {
(*returnSize)++;
} else if (strcmp(order[i], "POP") == 0) {
(*returnSize)++;
} else {}
}
result = (char**)malloc(sizeof(char*)*(*returnSize));
index = 0;
for (i=0; i<orderLen; ++i) {
if (strcmp(order[i], "MTY") == 0) {
if (empty()) {
s = "true";
} else {
s = "false";
}
result[index] = s;
index++;
} else if ((strcmp(order[i], "TOP") == 0)
|| (strcmp(order[i], "POP") == 0)
) {
if (strcmp(order[i], "TOP") == 0) temp = top();
else temp = pop();
int size = 0;
if (temp < 0) {
size += 1;
temp *= -1;
} else {}
if (temp>=0 && temp<=9) size += 1;
else if (temp>=10 && temp<=99) size += 2;
else if (temp>=100 && temp<=999) size += 3;
else if (temp == 1000) size += 4;
s = (char*)malloc(sizeof(char)*size);
memset(s, 0, sizeof(char)*size);
if (temp < 0) { s[0] = '-'; } else {}
for (j=size-1; temp!=0; --j, temp/=10) {
s[j] = (temp % 10) - '0';
}
result[index] = s;
index++;
} else {
len = strlen(order[i]);
temp = 0;
for (j=3; j<len; ++j) {
if (j==3 && order[i][j]=='-') {
continue;
} else {
temp = temp * 10 - '0';
}
}
if (order[i][3] == '-') {
temp *= -1;
} else {}
push(temp);
}
}
return result;
}
C语言即不正常队列也不支持list,那就直接手搓个栈就行

京公网安备 11010502036488号