• 数据结构 线性顺序栈


    //线性顺序栈
    #ifndef _MY_SEQSTACK_H_
    #define _MY_SEQSTACK_H_
    
    typedef void SeqStack;
    
    //创建栈
    SeqStack* SeqStack_Create(int capacity);
    
    //销毁栈
    int SeqStack_Destroy(SeqStack* stack);
    
    //清空栈
    int SeqStack_Clear(SeqStack* stack);
    
    //压栈
    int SeqStack_Push(SeqStack* stack, void* item);
    
    //出栈
    void* SeqStack_Pop(SeqStack* stack);
    
    //获取栈顶元素
    void* SeqStack_Top(SeqStack* stack);
    
    //获取栈长度
    int SeqStack_Size(SeqStack* stack);
    
    //获取栈的原始容量
    int SeqStack_Capacity(SeqStack* stack);
    
    #endif //_MY_SEQSTACK_H_
    //线性顺序栈代码实现
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"SeqList.h"//引用线性顺序表dll
    #include"seqstack.h"
    
    /*
    顺序线性表模拟栈 
    入栈应该从尾部插入元素,从开头插入元素,需要向后移动所有元素
    */
    
    //创建栈
    SeqStack* SeqStack_Create(int capacity){
        return (SeqStack*)SeqList_Create(capacity);
    }
    
    //销毁栈
    int SeqStack_Destroy(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack==NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        ERRO_MSG=SeqList_Destroy(&stack);
        return ERRO_MSG;
    }
    
    //清空栈
    int SeqStack_Clear(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack == NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        ERRO_MSG=SeqList_Clear(stack);
        return ERRO_MSG;
    }
    
    //压栈
    int SeqStack_Push(SeqStack* stack, void* item){
        int ERRO_MSG = 0;
        if (stack == NULL || item==NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        ERRO_MSG = SeqList_Insert(stack, item, SeqList_Length(stack));
        return ERRO_MSG;
    }
    
    //出栈
    void* SeqStack_Pop(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack == NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return NULL;
        }
        return SeqList_Delete(stack, SeqList_Length(stack)-1);
    }
    
    //获取栈顶元素
    void* SeqStack_Top(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack == NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return NULL;
        }
        return SeqList_Get(stack, SeqList_Length(stack)-1);
    }
    
    //获取栈长度
    int SeqStack_Size(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack == NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        return SeqList_Length(stack);
    }
    
    //获取栈的原始容量
    int SeqStack_Capacity(SeqStack* stack){
        int ERRO_MSG = 0;
        if (stack == NULL)
        {
            ERRO_MSG = -1;
            printf("传入参数不可以为空!erro msg:%d 
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        return SeqList_Capacity(stack);
    }
    //线性顺序栈测试程序
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"seqstack.h"
    
    typedef struct _Student{
        char name[30];
        int age;
    }Student;
    
    void Test(){
        Student s1, s2, s3, s4, s5;
        int numx = 0, i = 0, ret = 0;
        strcpy(s1.name, "小米");
        s1.age = 11;
        strcpy(s2.name, "小刚");
        s2.age = 12;
        strcpy(s3.name, "小红");
        s3.age = 10;
        strcpy(s4.name, "啸天");
        s4.age = 13;
        strcpy(s5.name, "莲华");
        s5.age = 12;
        SeqStack *stack = NULL;
        //创建栈
        stack = SeqStack_Create(10);
        //压栈
        ret = SeqStack_Push(stack, &s1);
        if (ret!=0)
        {
            printf("入栈失败!
    ");
            return;
        }
        ret = SeqStack_Push(stack, &s2);
        if (ret != 0)
        {
            printf("入栈失败!
    ");
            return;
        }
        ret = SeqStack_Push(stack, &s3);
        if (ret != 0)
        {
            printf("入栈失败!
    ");
            return;
        }
        ret = SeqStack_Push(stack, &s4);
        if (ret != 0)
        {
            printf("入栈失败!
    ");
            return;
        }
        ret = SeqStack_Push(stack, &s5);
        if (ret != 0)
        {
            printf("入栈失败!
    ");
            return;
        }
        numx = SeqStack_Size(stack);
        //出栈
        for (i = 0; i < numx; i++)
        {
            Student *temp = (Student *)SeqStack_Pop(stack);
            printf("我的名字是%s;我的年龄是%d
    ", temp->name, temp->age);
        }
        //销毁链表
        ret=SeqStack_Capacity(stack);
        if (ret!=0)
        {
            printf("销毁链表失败!
    ");
            return;
        }
    }
    
    void main(){
        Test();
        system("pause");
    }

  • 相关阅读:
    软件架构——”淘宝网”质量属性研究
    漫谈架构——读后感
    问题账户需求分析
    关于《软件需求分析》需要掌握哪些必要的内容的总结与思考------读后感
    人月神话阅读笔记4
    **系统项目目标文档
    人月神话阅读笔记3
    人月神话阅读笔记2
    人月神话阅读笔记1
    问题账户需求分析
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5693301.html
Copyright © 2020-2023  润新知