C语言栈数据结构实现详解及示例代码
本文详细解释了C语言中栈数据结构的实现,包括栈的定义、创建、入栈、出栈、获取栈顶元素、判断栈空/满、销毁栈等操作。并通过示例代码展示了栈的基本应用。
-
定义栈结构:
typedef struct Stack { int* data; int top; int capacity; } Stack;栈结构包含三个成员:'data'是一个整型数组,用于存储栈中的元素;'top'是栈顶的索引,初始值为-1;'capacity'是栈的最大容量。
-
创建一个新栈:
Stack* createStack(int capacity) { Stack* stack = (Stack*)malloc(sizeof(Stack)); stack->data = (int*)malloc(sizeof(int) * capacity); stack->top = -1; stack->capacity = capacity; return stack; }'createStack'函数用于创建一个具有给定容量的新栈。它动态分配内存来存储栈结构和栈数据,并将栈顶索引初始化为-1。
-
判断栈是否为空和是否已满:
int isEmpty(Stack* stack) { return stack->top == -1; } int isFull(Stack* stack) { return stack->top == stack->capacity - 1; }'isEmpty'函数用于判断栈是否为空,即栈顶索引是否为-1;'isFull'函数用于判断栈是否已满,即栈顶索引是否等于栈容量减1。
-
入栈操作:
void push(Stack* stack, int item) { if (isFull(stack)) { printf('栈已满,无法入栈\n'); return; } stack->data[++stack->top] = item; printf('元素 %d 入栈成功\n', item); }'push'函数用于将元素推入栈中。它首先检查栈是否已满,如果是,则打印错误消息并返回;否则,将元素放入数组中栈顶索引的下一个位置,并将栈顶索引增加1。
-
出栈操作:
int pop(Stack* stack) { if (isEmpty(stack)) { printf('栈为空,无法出栈\n'); return -1; } int item = stack->data[stack->top]; stack->top--; printf('元素 %d 出栈成功\n', item); return item; }'pop'函数用于从栈中弹出元素。它首先检查栈是否为空,如果是,则打印错误消息并返回-1;否则,返回栈顶索引指向的元素,并将栈顶索引减1。
-
获取栈顶元素:
int peek(Stack* stack) { if (isEmpty(stack)) { printf('栈为空\n'); return -1; } return stack->data[stack->top]; }'peek'函数用于获取栈顶元素,即栈顶索引指向的元素。它首先检查栈是否为空,如果是,则打印错误消息并返回-1。
-
销毁栈:
void destroyStack(Stack* stack) { free(stack->data); free(stack); printf('栈销毁成功\n'); }'destroyStack'函数用于释放栈的内存。它先释放存储栈数据的数组,然后释放栈结构本身的内存。
-
主函数示例:
int main() { Stack* stack = createStack(5); push(stack, 10); push(stack, 20); push(stack, 30); printf('栈顶元素:%d\n', peek(stack)); int item = pop(stack); printf('出栈元素:%d\n', item); printf('栈顶元素:%d\n', peek(stack)); destroyStack(stack); return 0; }在主函数中,我们首先通过调用'createStack'函数创建一个具有容量为5的新栈。然后,通过'push'函数将元素10、20和30依次推入栈中。接下来,通过'peek'函数获取并显示栈顶元素。然后,通过'pop'函数将栈顶元素弹出,并显示弹出的元素。最后,通过'peek'函数再次获取并显示栈顶元素。最后,我们通过调用'destroyStack'函数销毁栈,释放内存。
这个代码示例展示了栈的基本操作,可以作为一个起点,根据需要进行修改和扩展。如果您有任何进一步的问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/D2s 著作权归作者所有。请勿转载和采集!