空堆栈的链表

时间:2014-10-08 04:07:39

标签: 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)malloc(sizeof(Node));
    np -> data = d;
    np -> next = S -> top;
    S -> top = np;

}

1 个答案:

答案 0 :(得分:2)

这是实现堆栈数据结构及其操作的基本程序。希望它会对你有所帮助。

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

}