C 链表的空堆栈
我正试图找出清空链表堆栈的方法。我找到了一种方法,但这种方法只适用于数组堆栈C 链表的空堆栈,c,data-structures,linked-list,stack,C,Data Structures,Linked List,Stack,我正试图找出清空链表堆栈的方法。我找到了一种方法,但这种方法只适用于数组堆栈 void empty(StackPtr S) { S -> top = -1; } 我猜是用 while(!isEmpty(s)) 函数isEmpty将检查堆栈是否为空。然后我被卡住了:( 编辑: 我推动它的方式: void push(StackPtr S, StackData d) /*adds the top element*/ { NodePtr np = (NodePtr)ma
void empty(StackPtr S)
{
S -> top = -1;
}
我猜是用
while(!isEmpty(s))
函数isEmpty将检查堆栈是否为空。然后我被卡住了:(
编辑:
我推动它的方式:
void push(StackPtr S, StackData d) /*adds the top element*/
{
NodePtr np = (NodePtr)malloc(sizeof(Node));
np -> data = d;
np -> next = S -> top;
S -> top = np;
}
这是一个实现堆栈数据结构及其操作的基本程序。希望对您有所帮助
#include<stdio.h>
#include<stdlib.h>
#define INT_MIN -99;
struct Stack{
int data;
struct Stack *next;
};
struct Stack *CreateStack(){
return NULL;
}
void Push(struct Stack **top,int data){
struct Stack *temp;
temp=malloc(sizeof(struct Stack));
if(!temp)
return NULL;
temp->data = data;
temp->next= *top;
*top=temp;
}
int IsEmptyStack(struct Stack *top){
return top==NULL;
}
int Pop(struct Stack **top){
int data;
struct Stack *temp;
if(IsEmptyStack(*top))
return INT_MIN;
temp=*top;
*top=temp->next;
data=temp->data;
printf("%d",data);
free(temp);
return data;
}
int Top(struct Stack *top){
if(IsEmptyStack(top))
return INT_MIN;
return top->next->data;
}
void DeleteStack(struct Stack **top)
{
struct Stack *temp,*p;
p=*top;
while(p->next){
temp=p->next;
p->next=temp->next;
free(temp);
}
free(p);
}
void main(){
struct Stack *s=CreateStack();
Push(&s,5);
Push(&s,15);
Push(&s,52);
Pop(&s);
Pop(&s);
Push(&s,35);
Push(&s,53);
Pop(&s);
Push(&s,45);
}
#包括
#包括
#定义INT_MIN-99;
结构堆栈{
int数据;
结构堆栈*下一步;
};
结构堆栈*CreateStack(){
返回NULL;
}
无效推送(结构堆栈**顶部,整数数据){
结构堆栈*temp;
temp=malloc(sizeof(struct Stack));
如果(!temp)
返回NULL;
温度->数据=数据;
临时->下一步=*顶部;
*顶部=温度;
}
int IsEmptyStack(结构堆栈*top){
返回top==NULL;
}
int Pop(结构堆栈**顶部){
int数据;
结构堆栈*temp;
如果(IsEmptyStack(*顶部))
返回INT_MIN;
温度=*顶部;
*顶部=温度->下一步;
数据=临时->数据;
printf(“%d”,数据);
免费(临时);
返回数据;
}
int Top(结构堆栈*Top){
如果(IsEmptyStack(顶部))
返回INT_MIN;
返回顶部->下一步->数据;
}
void DeleteStack(结构堆栈**顶部)
{
结构堆栈*temp,*p;
p=*顶部;
while(p->next){
temp=p->next;
p->next=temp->next;
免费(临时);
}
自由基(p);
}
void main(){
struct Stack*s=CreateStack();
推送(s,5);
推(s,15);
推(s,52);
流行音乐(s&s);
流行音乐(s&s);
推(s,35);
推挤(53例);
流行音乐(s&s);
推(s,45);
}
您是如何将项目推到堆栈上的?您是否编写了将其弹出的方法?您好,我在上面添加了:)isEmpty()
如果top
是无效指针,则可以检查(或替换为检查)。如果没有,请保持pop()
pin'直到它被锁定,确保free()
每个节点都有一个。如果要为动态堆栈分配节点,每个节点都有一个malloc()
,那么最好在每个节点的某处都有一个free()
。对吗?while(!isEmpty(S)){pop(S);free(S);}