c语言动态指针栈的创建
时间: 2023-09-08 15:09:31 浏览: 45
动态指针栈是基于链表实现的,需要定义一个结构体来表示栈中的每一个节点。结构体中包含一个数据域和一个指向下一个节点的指针域。
```c
typedef struct StackNode {
int data;
struct StackNode *next;
} StackNode;
```
接下来,定义一个栈结构体,其中包含指向栈顶节点的指针。
```c
typedef struct Stack {
StackNode *top;
} Stack;
```
创建动态指针栈的过程如下:
```c
Stack *createStack() {
Stack *stack = (Stack *)malloc(sizeof(Stack));
stack->top = NULL;
return stack;
}
```
首先,创建一个栈结构体并分配内存空间。然后将栈顶指针初始化为空,表示栈中没有元素。最后返回栈结构体的指针。
接下来,实现入栈操作,将一个元素插入到栈顶。
```c
void push(Stack *stack, int data) {
StackNode *node = (StackNode *)malloc(sizeof(StackNode));
node->data = data;
node->next = stack->top;
stack->top = node;
}
```
首先,创建一个新的节点,并将要插入的数据存储在节点的数据域中。然后将新节点的指针指向当前栈顶节点。最后将栈顶指针更新为新节点的指针,表示新节点成为了栈顶。
最后,实现出栈操作,从栈顶弹出一个元素。
```c
int pop(Stack *stack) {
if (stack->top == NULL) {
printf("Stack is empty\n");
return -1;
}
int data = stack->top->data;
StackNode *temp = stack->top;
stack->top = stack->top->next;
free(temp);
return data;
}
```
首先,判断栈是否为空,如果为空则无法进行出栈操作。然后,获取栈顶节点中存储的数据,并将栈顶指针指向下一个节点。最后释放被弹出的节点的内存空间,并返回被弹出的元素。