데이터 구조 | C 언어 는 스 택 의 순서 와 체인 구 조 를 실현 합 니 다.

23559 단어 DataStructure
순서 창고 의 실현
순서대로 저 장 된 스 택 을 순서 스 택 이 라 고 합 니 다. 주소 의 연속 적 인 저장 부 를 이용 하여 스 택 밑 에서 스 택 꼭대기 까지 저장 하 는 데이터 요 소 를 사용 하 는 동시에 표지 top 이 스 택 꼭대기 의 위 치 를 표시 합 니 다.
이곳 은 구조 체 를 사용 하여 창 고 를 표시 한다.
#define maxsize 100
typedef struct stack{
	int data[maxsize];
	int top;
}stack

인 코딩 하기 전에 우 리 는 몇 가지 조작 상 태 를 알 아야 한다.
  • 스 택 비 움: top = - 1, - 1 동시에 초기 값 입 니 다.
  • 스 택 가득: top = maxsize - 1;
  • 입고: 창고 에 불만 이 있 으 면 top + 1, 그리고 data [top] = 수치;창고 가 가득 차 면 창고 에 들 어 가 는 데 실패 합 니 다.
  • 스 택 나 가기: 스 택 이 비어 있 지 않 으 면 데이터 [top] 를 먼저 취하 고 top - 1;

  • 실 현 된 코드 는 다음 과 같다.
    #include 
    #include 
    #include 
    #define MAXSIZE 200
    
    typedef struct SNode* Stack;
    typedef struct SNode SNode;
    struct SNode{
        int data[MAXSIZE];
        int top;
    };
    
    Stack initial_stack(){
        Stack s = (Stack)malloc(sizeof(SNode));
        s->top = -1;
    }
    
    bool push(Stack S, int item){
        if(S->top == MAXSIZE - 1){
            printf("ERROR: The stack is full!
    "
    ); return false; } else{ S->top++; S->data[S->top] = item; return true; } } bool isEmpty(Stack s){ return s == NULL || s->top == -1; } bool isFull(Stack s){ return s->top == MAXSIZE - 1; } int getElement(Stack s, int index){ if(s->top == -1){ printf("The stack is empty!"); return -1; } if(index > s->top || index < 0){ printf("The index is out of bound!"); return -1; } return s->data[index]; } int pop(Stack S){ if(isEmpty(S)) return -1; return S->data[(S->top)--]; } int top(Stack S){ if(isEmpty(S)) return -1; return S->data[S->top]; } void printStack(Stack S){ if(isEmpty(S)) return; for(int i = 0; i <= S->top; i++){ printf("%d \t", S->data[i]); } printf("
    "
    ); } int main() { Stack s = initial_stack(); push(s, 3); push(s, 5); pop(s); printStack(s); }

    스 택 의 체인 구조
    스 택 의 체인 구 조 는 보통 단일 체인 표를 통 해 이 루어 지 며 스 택 이 넘 치 는 상황 이 존재 하지 않 습 니 다.여기 서 실 현 된 체인 구조 규정 스 택 에 하나의 머리 결산 점 이 존재 하 는데 이 결산 점 은 스 택 요소 와 무관 하지만 프로 그래 밍 의 실현 을 편리 하 게 할 수 있다.두 결점 의 다음 결점 에 저 장 된 값 이 야 말로 창고 밑 원소 다.
    구현 코드 는 다음 과 같 습 니 다:
    #include 
    #include 
    #include 
    
    typedef struct SNode* Stack;
    typedef struct SNode SNode;
    
    struct SNode{
        int data;
        SNode* next;
    };
    
    Stack initial_stack(){
        Stack s = (Stack)malloc(sizeof(SNode));
        s->next=NULL;
        s->data=-1; //        
        return s;
    }
    
    bool isEmpty(Stack s){
        return s->next == NULL;
    }
    
    bool push(Stack s, int item){
        if(s == NULL)
            return false;
        Stack tmpNode = (Stack)malloc(sizeof(SNode));
        tmpNode->data=item;
        tmpNode->next=s->next;
        s->next = tmpNode;
        return true;
    }
    
    int top(Stack s){
        if(isEmpty(s))
            return -1;
        return s->next->data;
    }
    
    int pop(Stack S){
        if(isEmpty(S))
            return -1;
        int topVal = top(S);
        Stack oldTopNode = S->next;
        Stack newTopNode = oldTopNode->next;
        S->next= newTopNode;
        free(oldTopNode);
        return topVal;
    }
    
    void printStack(Stack s){
        if(isEmpty(s))
            return;
    
        Stack node = s->next;
    
        while(s){
            printf("%d -> ",  s->data);
            s = s->next;
        }
        printf("
    "
    ); } int main() { Stack s = initial_stack(); push(s, 1); push(s, 2); push(s, 3); printStack(s); pop(s); printStack(s); return 0; }

    상기 코드 는 엄격 하지 않 은 테스트 만 거 쳤 습 니 다. 만약 에 무슨 문제 가 발견 되면 댓 글 의 수정 을 환영 합 니 다!

    좋은 웹페이지 즐겨찾기