2014-10-08 6 views
1

링크 된 목록의 스택을 비우는 방법을 생각하고 있습니다. 나는 방법을 발견하지만,이 방법은 배열 만 일이 내 생각이 스택이 비어 있거나하지 않으면 기능 IsEmpty 함수가 확인합니다링크 된 목록의 빈 스택

while(!isEmpty(s)) 

사용하는 것입니다

void empty(StackPtr S) 
{ 
    S -> top = -1; 
} 

스택입니다. 그럼 난 갇혀있어 :(

편집 : 내가 밀어 방법 :..

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; 

} 
+0

어떻게 아이템을 스택에 넣을 수 있습니까? – polarysekt

+0

안녕하세요, 위 코드를 추가했습니다 :) – kybookie

+1

isEmpty()는 체크 할 수 있습니다 (또는)'top'이 무효 포인터 인 경우. 그렇지 않다면'pop()'핀을'free()'를 할 때까지 그대로 두십시오. – polarysekt

답변

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

}