本帖最后由 人造人 于 2021-11-8 20:13 编辑
为什么别人不理你?
你这代码要别人怎么看?
你发了问题都不检查一下的吗?
同样,你这代码我也没法看,但是作为练习,我自己写了一个,你可以看一下
你代码存在的问题
1. 你发的代码不完整
2. *********处的代码没法看
3. 感觉你的算法不对,仅仅只是感觉,因为你的代码***********处没法看,不知道对不对
stack.h#ifndef _STACK_H_
#define _STACK_H_
#include <stddef.h>
#include <stdbool.h>
struct stack_node_tag {
void *data;
size_t size;
struct stack_node_tag *next;
};
typedef struct {
struct stack_node_tag *head;
size_t size;
} stack_t;
stack_t *stack_init(void);
void stack_deinit(stack_t *stack);
bool stack_clean(stack_t *stack);
bool stack_push(stack_t *stack, const void *data, size_t size);
bool stack_pop(stack_t *stack);
bool stack_top(const stack_t *stack, void *data, size_t size);
size_t stack_size(const stack_t *stack);
bool stack_empty(const stack_t *stack);
#endif
stack.c#include "stack.h"
#include <stdlib.h>
#include <memory.h>
stack_t *stack_init(void) {
stack_t *stack = malloc(sizeof(*stack));
if(!stack) return NULL;
stack->head = NULL;
stack->size = 0;
return stack;
}
void stack_deinit(stack_t *stack) {
if(!stack) return;
stack_clean(stack);
free(stack);
}
bool stack_clean(stack_t *stack) {
if(!stack) return false;
while(!stack_empty(stack)) stack_pop(stack);
return true;
}
bool stack_push(stack_t *stack, const void *data, size_t size) {
if(!stack) return false;
if(!data) return false;
struct stack_node_tag *node = malloc(sizeof(*node));
if(!node) return false;
node->data = malloc(size);
if(!node->data) {free(node); return false;}
memcpy(node->data, data, size);
node->size = size;
node->next = stack->head;
stack->head = node;
++stack->size;
return true;
}
bool stack_pop(stack_t *stack) {
if(!stack) return false;
if(stack_empty(stack)) return false;
struct stack_node_tag *temp = stack->head;
stack->head = temp->next;
free(temp->data); free(temp);
--stack->size;
return true;
}
bool stack_top(const stack_t *stack, void *data, size_t size) {
if(!stack) return false;
if(!data) return false;
if(stack_empty(stack)) return false;
struct stack_node_tag *temp = stack->head;
if(temp->size > size) return false;
memcpy(data, temp->data, temp->size);
return true;
}
size_t stack_size(const stack_t *stack) {
if(!stack) return 0;
return stack->size;
}
bool stack_empty(const stack_t *stack) {
if(!stack) return true;
return stack_size(stack) == 0;
}
main.c#include "stack.h"
#include <stdio.h>
#include <stdbool.h>
int main(void) {
char str[1024]; scanf("%s", str);
stack_t *stack = stack_init();
for(size_t i = 0; str[i]; ++i) {
stack_push(stack, &str[i], sizeof(str[i]));
}
bool flag = true;
for(size_t i = 0; str[i]; ++i) {
char temp;
stack_top(stack, &temp, sizeof(temp));
stack_pop(stack);
if(temp != str[i]) {
flag = false; break;
}
}
if(flag) printf("yes\n");
else printf("no\n");
stack_deinit(stack);
return 0;
}
|