美文网首页工作生活
顺序栈(C语言)

顺序栈(C语言)

作者: PersisThd | 来源:发表于2019-07-07 15:06 被阅读0次

    1、头文件SqQueue.h

    #include <stdio.h>
    #define MAXSIZE 100
    
    typedef struct SqQuene
    {
        int rear;
        void* data[MAXSIZE];
    }SqQuene;
    
    void InitQuene(SqQuene*);
    int QueneEmpty(SqQuene*);
    int QueneLength(SqQuene*);
    void GetFront(SqQuene*, void**);
    void EnQuene(SqQuene*, void*);
    void DeQuene(SqQuene*, void**);
    void ClearQuene(SqQuene*);
    

    2、相关操作函数文件SqQueue.c

    #include <stdio.h>
    #include <string.h>
    #include "SqQuene.h"
    
    void InitQuene(SqQuene* sq)
    {
        sq->rear = -1;
        memset(sq->data, 0, sizeof(sq->data));
    }
    
    int QueneEmpty(SqQuene* sq)
    {
        if(sq->rear == -1)
            return 1;
        return 0;
    }
    
    int QueneLength(SqQuene* sq)
    {
        return sq->rear + 1;
    }
    
    void ClearQuene(SqQuene* sq)
    {
        sq->rear = -1;
    }
    
    void GetFront(SqQuene* sq, void** e)
    {
        if(sq->rear == -1)
        {
            printf("队列为空,无法出队!\n");
            return;
        }
    
        *e = sq->data[0];
    }
    
    void EnQuene(SqQuene* sq, void* e)
    {
        if(sq->rear == MAXSIZE - 1)
        {
            printf("队列已满,无法入队!\n");
            return;
        }
    
        sq->rear++;
        sq->data[sq->rear] = e;
    }
    
    void DeQuene(SqQuene* sq, void** e)
    {
        if(sq->rear == -1)
        {
            printf("空队列,无法出队!\n");
            return;
        }
    
        *e = sq->data[0];
    
        int i = 1;
        for(i = 1; i <= sq->rear; i++)
        {
            sq->data[i-1] = sq->data[i];
        }
    
        sq->rear--;
    
    }
    

    3、主函数main.c

    #include <stdio.h>
    #include <stdlib.h>
    #include "SqQuene.h"
    
    typedef struct stu
    {
        int id;
        int age;
    }Student;
    
    int main()
    {
        SqQuene sq;
        InitQuene(&sq);
    
        Student s[10];
        int i = 0;
        for(i = 0; i < 10; i++)
        {
            s[i].id = i;
            s[i].age = i + 20;
        }
    
        for(i = 0; i < 10; i++)
        {
            EnQuene(&sq, &s[i]);
        }
    
        printf("The size of Quene: %d\n", QueneLength(&sq));
    
        while(!QueneEmpty(&sq))
        {
            Student* tmp;
            GetFront(&sq, (void**)&tmp);
            printf("当前队头元素值为:%d, %d\n", tmp->id, tmp->age);
            //printf("当前队头的元素值为:id = %d, age = %d\n", tmp->id, tmp->age);
    
            DeQuene(&sq, (void**)&tmp);
            printf("当前出队的元素值为:id = %d, age = %d\n", tmp->id, tmp->age);
            printf("\n");
        }
    
        EnQuene(&sq, &s[0]);
    
        ClearQuene(&sq);
        printf("The size of Quene: %d\n", QueneLength(&sq));
    
        return 0;
    }
    

    相关文章

      网友评论

        本文标题:顺序栈(C语言)

        本文链接:https://www.haomeiwen.com/subject/edzgcctx.html