作者 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;
}
评论已关闭