首页 > 其他分享 >栈

时间:2023-04-20 16:58:36浏览次数:27  
标签: return sqstack int printf NULL data

线性表:

  顺序表:数组

  链表:链表

顺序栈:

//sqstack.h
#ifndef _SQ_STACK_H_
#define _SQ_STACK_H_

typedef int data_t;
typedef struct{
    data_t *data;
    int len;
    int top;
}sqstack;

sqstack *sqstack_create(int length);
int sqstack_destroy(sqstack *s);
int sqstack_push(sqstack *s, int value);
data_t sqstack_pop(sqstack *s);
int sqstack_clear(sqstack *s); 
int sqstack_empty(sqstack *s);
int sqstack_full(sqstack *s);
void sqstack_show(sqstack *s);


#endif
//sqstack.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqstack.h"

sqstack *sqstack_create(int length)
{
    sqstack *s = (sqstack *)malloc(sizeof(sqstack));
    if(s == NULL){
        printf("malloc s failed!!\n");
        return NULL;
    }
    s->data = (data_t *)malloc(length * sizeof(data_t));
    if(s->data == NULL){
        printf("malloc s->data failed!!\n");
        free(s);
        return NULL;
    }
    s->len = length;
    s->top = -1;// -1表示一个空链表
    return s;
}

int sqstack_destroy(sqstack *s)
{
    if(s == NULL){
        printf("stack is NULL\n");
        return -1;
    }
    free(s->data);
    free(s);
}
/*
*ret @1-empty
*/
int sqstack_empty(sqstack *s)
{
    if(s == NULL){
        printf("stack is NULL\n");
        return -1;
    }
    if(s->top == -1)
        return 1;
    else 
        return 0;
}
/*
*ret @1-full
*/
int sqstack_full(sqstack *s)
{
    if(s == NULL){
        printf("stack is NULL\n");
        return -1;
    }
    if(s->top > s->len-1)
        return 1;
    else 
        return 0;
}

int sqstack_push(sqstack *s, int value)
{
    if(sqstack_full(s)){
        printf("stack is full\n");
        return -1;
    }
    s->data[++s->top] = value;
}

data_t sqstack_pop(sqstack *s)
{
    if(sqstack_empty(s)){
        printf("stack is empty\n");
        return -1;
    }
    s->top--;
    return s->data[s->top+1];
}

int sqstack_clear(sqstack *s)
{
    if(s == NULL){
        printf("stack is NULL");
        return -1;
    }
    s->top = -1;
    return 0;
}

void sqstack_show(sqstack *s)
{
    while(!sqstack_empty(s)){
        printf("%d\t",sqstack_pop(s));
    }
    printf("\n");    
}
//sqstack_test.c
#include "sqstack.h"
#include <stdio.h>

int main()
{
    int i = 0;
    sqstack *s = sqstack_create(20);
    for(i = 0; i < 20; i++){
        sqstack_push(s, i);
        printf("%d\t",i);
    }    
    printf("\n");
    sqstack_show(s);
    return 0;
}

 

标签:,return,sqstack,int,printf,NULL,data
From: https://www.cnblogs.com/zj-studyrecoding/p/17337387.html

相关文章