第三次作业

作者 by aigle / 2022-01-22 / 暂无评论

二、2
输出

G:\CODE\cpp1\cmake-build-debug\c1.exe
请输入栈空间的大小:8
双栈S初始化成功!
输入要操作的栈的栈号:0
当前栈为空!
当前栈未满!
请输入入栈的元素个数:5
请输入第1个元素:2
请输入第2个元素:3
请输入第3个元素:5
请输入第4个元素:9
请输入第5个元素:44
栈顶元素出栈:44
输入要操作的栈的栈号:1
当前栈为空!
当前栈未满!
请输入入栈的元素个数:3
请输入第1个元素:449
请输入第2个元素:556
请输入第3个元素:264
栈顶元素出栈:264

Process finished with exit code 0
#include <stdio.h>
using namespace std;
// 定义双栈结构
typedef struct
{
    int top[2], bot[2];  // 栈顶指针和栈底指针
    int *V;   // 存储双栈的数组空间
    int m;    // 数组空间的大小
}DblStack;
int InitStack(DblStack &S, int m);//初始化一个大小为m的双栈
int IsEmpty(DblStack &S, int i);//判断i号栈是否为空
int IsFull(DblStack &S);// 判断栈是否满
int Push(DblStack &S, int i, int e);// i号栈进栈操作
int Pop(DblStack &S, int i, int &e);// i号栈出栈操作
int InitStack(DblStack &S, int m)
{
    S.V = new int[m];
    if (!S.V)
        return 0;
    S.top[0] = S.bot[0] = -1;
    S.top[1] = S.bot[1] = m;
    return 1;
}
int IsEmpty(DblStack &S, int i)
{
    return S.top[i] == S.bot[i];
}

int IsFull(DblStack &S)
{
    if (S.top[1] - S.top[0] == 1)
    {
        return 1;  // 栈满
    }
    else
    {
        return 0;  // 栈空
    }
}

int Push(DblStack &S, int i, int e)
{
    //将元素e进入i号栈
    if (IsFull(S))
    {
        return 0;//栈已满,无法入栈
    }
    if (i == 0)
    {
        S.V[++S.top[0]] = e;
    }
    else
    {
        S.V[--S.top[1]] = e;
    }
}

int Pop(DblStack &S, int i, int &e)
{
    //用返回i号栈的栈顶元素
    if (IsEmpty(S, i))
    {
        return 0;//栈 空,无法出栈
    }
    if (i == 0)
    {
        e = S.V[S.top[0]--];
    }
    else
    {
        e = S.V[S.top[1]++];
    }
    return 1;
}
int main()
{
    DblStack S;
    int m;
    printf("请输入栈空间的大小:");
    scanf("%d", &m);
    if (InitStack(S, m))
    {
        printf("双栈S初始化成功!\n");
    }
    else
    {
        printf("双栈S初始化失败!\n");
    }
    int x;
    for (int i = 0; i < 2; i++) {
        printf("输入要操作的栈的栈号:");
        scanf("%d", &x);
        if (IsEmpty(S, x))
        {
            printf("当前栈为空!\n");
        }
        else
        {
            printf("当前栈非空!\n");
        }
        if (IsFull(S))
        {
            printf("当前栈满!\n");
        }
        else
        {
            printf("当前栈未满!\n");
        }
        int n;
        printf("请输入入栈的元素个数:");
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            int e;
            printf("请输入第%d个元素:", i + 1);
            scanf("%d", &e);
            Push(S, x, e);
        }
        int s;
        Pop(S, x, s);
        printf("栈顶元素出栈:%d\n", s);
    }
    return 0;
}

三、3
输出

G:\CODE\C2\cmake-build-debug\C2.exe
0-2-4-6-8-10-12-14-16-18-20-22-24-26-28-30-32-34-36-38-40-42-44-46-48-50-52-54-56-58-60-62-64-66-68-70-72-74-76-78-80-82-84-86-88-90-92-94-96-98-100-102-104-106-108

20-22-24-26-28-30-32-34-36-38-40-42-44-46-48-50-52-54-56-58-60-62-64-66-68-70-72-74-76-78-80-82-84-86-88-90-92-94-96-98-100-102-104-106-108
#include<stdio.h>
#include<stdlib.h>

#define m 55

//循环队列的结构类型定义
typedef int datatype;
typedef struct
{
    datatype sequ[m];
    int  rear, quelen;
}qu;

//函数声明
qu* creatqueue();//创建队列
void setnull(qu*);//置空队
void enqueue(qu*, datatype);//入队
datatype *dequeue(qu*);//出队
void printqueue(qu*);//打印队列

//主函数
int main()
{
    qu *sq= creatqueue();



    setnull(sq);
    for (int i = 0; i < m; i++) {
        enqueue(sq, 2*i);
    }
    printqueue(sq);
    printf("\n");
    for (int i = 0; i < 10; i++) {
        dequeue(sq);
    }
    printqueue(sq);
    return 0;
}

//建立队
qu* creatqueue()
{
    qu *sq;
    sq=(qu*)malloc(sizeof(qu));
    return sq;
}
//置空队
void setnull(qu *sq)
{
    sq->rear = m - 1;
    sq->quelen = 0;
}

//入队
void enqueue(qu*sq, datatype x)
{
    if (sq->quelen == m)
        {
            printf("队已满,无法插入 \n");
            exit(-1) ;
        }
    else if((sq->rear+1)==m)
    {
        sq->rear = (sq->rear + 1) % m;
        sq->sequ[sq->rear] = x;
        sq->quelen++;
    }
    else
    {
        sq->rear++;
        sq->sequ[sq->rear] = x;
        sq->quelen++;
    }

}


//出队
datatype *dequeue(qu*sq)
{
    datatype sun=0;
    if (sq->quelen == 0)
    {
        printf("Error! The queue will be under flow!\n");
        return 0;
    }
    else if ((sq->rear + 1) >= sq->quelen)
    {
        sq->quelen--;
        sun = sq->sequ[sq->rear - sq->quelen];
        return(&sun);
    }
    else    //  if(sq->rear < sq->quelen)
    {
        sq->quelen--;
        sun = sq->sequ[sq->rear - sq->quelen + m];
        return(&sun);
    }
}

//打印队列
void printqueue(qu*sq)
{
    if (sq->quelen == 0)
        printf("Error! The queue is Null!\n");
    else if ((sq->rear + 1) >= sq->quelen)
    {
        int i = sq->rear + 1 - sq->quelen;
        for (i; i <= sq->rear; i++)
            printf("%d-", sq->sequ[i]);
    }
    else
    {
        int t = sq->rear - sq->quelen + m +1;
        int time = 1;
        for (t; time <= (sq->quelen); time++)
        {
            printf("%d   ", sq->sequ[t]);
            t++;
            if (t == m)
            {
                t = 0;
                continue;
            }
            else
            {
                continue;
            }
        }
    }
    printf("\n");
}

G:\CODE\cpp1\cmake-build-debug\c3.exe
该队列目前为空!
2-4-6-8-10-12-14-16-18-20-已入列
元素2成功出列!
元素4成功出列!
元素6成功出列!
元素8成功出列!
元素10成功出列!
元素12成功出列!
元素14成功出列!
元素16成功出列!
元素18成功出列!
元素20成功出列!
#include <stdio.h>
#include <stdlib.h>
#define ERROR 0
#define OK 1
#define OVERFLOW 0

typedef int qelemType;

typedef struct queue
{
    qelemType data;
    struct queue *next;
}queue,*linkqueue;
typedef struct
{
    linkqueue rear;
    int length;
}sqqueue;
void initQueue(sqqueue &queue);//置空队列
int emptyQueue(sqqueue &queue);//判队列是否为空
int enqueue(sqqueue &queue,qelemType e);//元素入队
int delqueue(sqqueue &queue,qelemType &e);//元素出队
void initQueue(sqqueue &queue)//置空队列
{
    queue.rear=(linkqueue)malloc(sizeof(queue));
    queue.rear->next=queue.rear;
}

int emptyQueue(sqqueue &queue)//判队列是否为空
{
    if(queue.rear->next==queue.rear)
        return OK;
    else
        return 0;
}

int enqueue(sqqueue &queue,qelemType e)
{
    linkqueue p;
    p=(linkqueue)malloc(sizeof(queue));
    if(!p)
        return OVERFLOW;
    p->data=e;
    p->next=queue.rear->next;
    queue.rear->next=p;
    queue.rear=p;
    return OK;
}

int delqueue(sqqueue &queue,qelemType &e)
{
    linkqueue p;
    if(queue.rear->next==queue.rear)
        return ERROR;
    p=queue.rear->next->next;
    e=p->data;
    queue.rear->next->next=p->next;
    free(p);
    return OK;
}

int main()
{
    sqqueue queue2;
    qelemType num;
    initQueue(queue2);
    if(emptyQueue(queue2))
        printf("该队列目前为空!\n");
    else
        printf("该队列不为空!\n");
    for(int i=1;i<=10;i++)
        if(enqueue(queue2,2*i))
            printf("%d-",2*i);
    printf("已入列\n");
    for(int j=1;j<=9;j++)
        if(delqueue(queue2,num))
            printf("元素%d成功出列!\n",num);
    if(emptyQueue(queue2))
        printf("该队列目前为空!\n");
    else
        printf("该队列不为空!\n");
    return 0;
}

评论已关闭