数据结构-链式存储结构栈

28次阅读

共计 2280 个字符,预计需要花费 6 分钟才能阅读完成。

链式存储结构 - 栈

#include <stdlib.h>
#include <stdio.h>

typedef int data_t;
// 类型
typedef struct node{
    data_t data;
    struct node* next;
}linkstack_t;

// 创建
linkstack_t* create_stack()
{linkstack_t* stack=malloc(sizeof(linkstack_t));

    stack->next=NULL;

    return stack;
}
// 判空
int isnull_stack(linkstack_t* stack)
{if(stack==NULL)
        return 0;

    return stack->next==NULL;
}
// 入栈
int push_stack(linkstack_t* stack,data_t data)
{if(stack==NULL)
        return -1;

    linkstack_t* newnode=create_stack();

    newnode->data=data;

    newnode->next=stack->next;

    stack->next=newnode;

    return 0;
}
// 出栈
int pop_stack(linkstack_t* stack, data_t* data)
{if(stack==NULL||isnull_stack(stack)||data==NULL)
        return -1;

    linkstack_t* temp=stack->next;

    stack->next=temp->next;

    *data=temp->data;

    free(temp);

    return 0;
}
// 看一眼
int view_stack(linkstack_t* stack)
{if(stack==NULL||isnull_stack(stack))
        return -1;


    printf("%3d",stack->next->data);

    return 0;
}
// 长度
int length_stack(linkstack_t* stack)
{if(stack==NULL||isnull_stack(stack))
        return 0;

    int sum=0;

    while(stack->next!=NULL)
    {
        sum++;
        stack=stack->next;
    }
    return sum;
}
// 清空
int clear_stack(linkstack_t* stack)
{if(stack==NULL||isnull_stack(stack))
        return -1;

    data_t data;
    while(!isnull_stack(stack))
    {pop_stack(stack,&data);
    }
    return 0;
}
// 销毁
int destroy_stack(linkstack_t* stack)
{if(stack==NULL)
        return -1;

    if(!isnull_stack(stack))
        clear_stack(stack);

    free(stack);

    return 0;
}
// 打印(真)int print_stack(linkstack_t* stack)
{if(stack==NULL||isnull_stack(stack))
        return -1;


    linkstack_t* temp=create_stack();

    data_t data;
    while(!isnull_stack(stack))
    {view_stack(stack);

        pop_stack(stack,&data);

        push_stack(temp,data);
    }
    printf("\n");

    while(!isnull_stack(temp))
    {pop_stack(temp,&data);

        push_stack(stack,data);
    
    }

    destroy_stack(temp);
    return 0;
}

// 逆打印(真)//
int reprint_stack(linkstack_t* stack)
{if(stack==NULL||isnull_stack(stack))
        return -1;


    linkstack_t* temp=create_stack();

    data_t data;
    while(!isnull_stack(stack))
    {//    view_stack(stack);

        pop_stack(stack,&data);

        push_stack(temp,data);
    }
//    printf("\n");

    while(!isnull_stack(temp))
    {view_stack(temp);

        pop_stack(temp,&data);

        push_stack(stack,data);
    
    }
    printf("\n");

    destroy_stack(temp);
    return 0;
}


int main(int argc, const char *argv[])
{linkstack_t* stack=create_stack();
    

    int i;

    for(i=1;i<=20;i++)
    {push_stack(stack,i*5);
        print_stack(stack);
    }


    reprint_stack(stack);

    print_stack(stack);

    printf("length_stack:%d\n",length_stack(stack));

    clear_stack(stack);

    printf("length_stack:%d\n",length_stack(stack));

    destroy_stack(stack);

    return 0;
}

正文完
 0