Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 链表的空堆栈_C_Data Structures_Linked List_Stack - Fatal编程技术网

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);}