用c++语言实现队列的创建

(1)创建队列,将asdfghjkl依次入队。代码及注释
(2)将队列asdfghjkl依次出队。代码及注释
(3)编程实现创建一个最多6个元素的循环队列,将ABCDEF依次入队,判断循环队列是否队满。代码及注释

(1)和(2)是一个代码,(3)在(1)的基础上有一些修改。
(1)和(2)运行结果及代码:

img

#include <iostream>
using namespace std;
#define MAXLEN (int)20
typedef char elementtype;
//队列先进先出
typedef struct  
{
    elementtype* element;
    int cur;
    int tail;
}SQueue;


//初始化栈
void InitStack_sq(SQueue &s)
{
    int i=0;
    s.element = new elementtype[MAXLEN];
    s.cur = 0;
    s.tail = 0;
}

//判断队列是否为空
int isEmpty_sq(SQueue s)
{
    if(s.tail ==0 || s.cur == s.tail)
        return 1;
    else
        return 0;
}

//判断是否队满
int isFull_sq(SQueue s)
{
    if(s.tail == MAXLEN)
        return 1;
    else
        return 0;
}

//取队列元素
int GetTop_sq(SQueue &s,elementtype& x)
{
    if(isEmpty_sq(s))
        return 0;
    x = s.element[s.cur];
    return 1;
}
//入队
int Push_sq(SQueue &s,elementtype x)
{
    if(isFull_sq(s))
        return 0;

    //插入队列
    s.element[s.tail] = x;
    s.tail++;
    return 1;
}
//出队
int Pop_sq(SQueue& s,elementtype& x)
{
    if(isEmpty_sq(s))
        return 0;
    x = s.element[s.cur];
    s.cur++;
    return 1;
}

//遍历队列元素
void showAll(SQueue s)
{
    cout <<"队列元素:";
    for(int i=s.cur;i<s.tail;i++)
    {
        cout << (char)s.element[i];
    }
    cout << endl;
}


int main()
{
    SQueue s;
    InitStack_sq(s); //初始化队列
    //asdfghjkl依次入队
    Push_sq(s,'a');
    Push_sq(s,'s');
    Push_sq(s,'d');
    Push_sq(s,'f');
    Push_sq(s,'g');
    Push_sq(s,'h');
    Push_sq(s,'k');
    Push_sq(s,'l');
    //显示队列元素
    showAll(s);

    elementtype x;
    //依次出队
    cout <<"出队:";
    while(!isEmpty_sq(s))
    {
        Pop_sq(s,x);
        cout <<(char)x;
    }
    cout << endl;
    return 0;
}

(3)运行结果:

img

代码:

#include <iostream>
using namespace std;
#define MAXLEN (int)6
typedef char elementtype;
//队列先进先出
typedef struct  
{
    elementtype* element;
    int cur;
    int tail;
}SQueue;


//初始化栈
void InitStack_sq(SQueue &s)
{
    int i=0;
    s.element = new elementtype[MAXLEN];
    for(;i<MAXLEN;i++)
        s.element[i] = 0;
    s.cur = 0;
    s.tail = 0;
}

//判断队列是否为空
int isEmpty_sq(SQueue s)
{
    if(s.tail ==0 || s.cur == s.tail)
        return 1;
    else
        return 0;
}

//判断是否队满
int isFull_sq(SQueue s)
{
    if(s.tail == MAXLEN)
        return 1;
    else
        return 0;
}

//取队列元素
int GetTop_sq(SQueue &s,elementtype& x)
{
    if(isEmpty_sq(s))
        return 0;
    x = s.element[s.cur];
    return 1;
}
//入队
int Push_sq(SQueue &s,elementtype x)
{
    if(isFull_sq(s))
        s.tail = 0;

    //插入队列
    s.element[s.tail] = x;
    s.tail++;
    return 1;
}
//出队
int Pop_sq(SQueue& s,elementtype& x)
{
    if(isEmpty_sq(s))
        return 0;
    x = s.element[s.cur];
    s.cur++;
    return 1;
}

//遍历队列元素
void showAll(SQueue s)
{
    cout <<"循环队列元素:";
    
    for(int i=0;i<MAXLEN;i++)
    {
        if(s.element[i] != '\0')
            cout << (char)s.element[i];
    }
    cout << endl;
}


int main()
{
    SQueue s;
    InitStack_sq(s); //初始化队列
    //ABCDEF入队
    Push_sq(s,'A');
    Push_sq(s,'B');
    Push_sq(s,'C');
    Push_sq(s,'D');
    Push_sq(s,'E');
    Push_sq(s,'F');
    //显示队列元素
    showAll(s);

    //判断是否队满
    if(isFull_sq(s))
        cout <<"此时队满"<<endl;
    else
        cout <<"队列未满"<<endl;

    return 0;
}