gpt4 book ai didi

c - 如何在 C 中的同一个 ADT 中使用多种数据类型?

转载 作者:行者123 更新时间:2023-11-30 16:43:49 24 4
gpt4 key购买 nike

例如,如果我在 C 中定义了 Stack ADT,通常我的类型定义(使用基于数组的实现)如下所示:

typedef char StackEntry;

typedef struct stack {
int top;
StackEntry entry[MAXSTACK];
} Stack;

如何使我的堆栈能够在同一程序中拥有一个用于字符的堆栈和另一个处理整数的堆栈?

最佳答案

您可以使用一个堆栈结构,该结构使用元素的大小进行初始化,并以字节为单位保留一个内存块来存储元素:

typedef struct stack {
int top;
size_t size;
size_t maxElems;
char content[];
} Stack;

Stack *createStack(size_t size, size_t maxElems) {
Stack *result = malloc(sizeof(Stack)+size*maxElems);
result->top=0;
result->size=size;
result->maxElems=maxElems;
return result;
}

int push(Stack *stack, void *elem) {
if (stack->top == stack->maxElems)
return -1;

memcpy(stack->content + stack->top * stack->size, elem, stack->size);
stack->top++;
return stack->top;
}

int pop(Stack *stack, void *elem) {
if (stack->top == 0)
return -1;

stack->top--;
memcpy(elem, stack->content + stack->top * stack->size, stack->size);
return stack->top;
}

int main() {

Stack *charStack = createStack(sizeof(char), 10);
for (int i=0; i<10; i++) {
char c = 'A'+i;
push(charStack, &c);
}
char c;
while (pop(charStack, &c) >= 0) {
printf("%c\n", c);
}
free(charStack);

Stack *intStack = createStack(sizeof(int), 10);
for (int i=0; i<10; i++) {
push(intStack, &i);
}
int i;
while (pop(intStack, &i) >= 0) {
printf("%d\n", i);
}
free(intStack);
}

关于c - 如何在 C 中的同一个 ADT 中使用多种数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44959195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com