栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

队列的基本操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

队列的基本操作

1. 建立循环队列。

2. 在循环队列上实现入队、出队等操作。

3. 建立链队列。

4. 在链队列上实现入队、出队等操作。

5. 用队列实现杨辉三角形的打印。(选做)

# define  _CRT_SECURE_NO_WARNINGS

# include "stdio.h"

# include "stdlib.h"

#define MAXSIZE 1024

typedef int elemtype;

typedef struct SequenQueue

{

elemtype data[MAXSIZE];

int front;

int rear;

} SequenQueue;



SequenQueue * init_SequenQueue()

{

SequenQueue* Q;

Q = (SequenQueue*)malloc(sizeof(SequenQueue));

Q->front = 0;

Q->rear = 0;

return Q;

}

int SequenQueue_Empty(SequenQueue* Q)

{

if (Q->front== Q->rear)

{

return 1;

}

else { return 0;}

}



int SequenQueue_Full(SequenQueue *Q)

{if((Q->rear+1)% MAXSIZE==Q->front)

{return 1;}

else { return 0;}

}



int  SequenQueue_Length(SequenQueue *Q)

{

return(((Q->rear - Q->front) + MAXSIZE) % MAXSIZE);

}

int Enter_SequenQueue(SequenQueue *Q,elemtype x)

{

if (SequenQueue_Full(Q)) { return 0;}

Q->data[Q->rear] = x;

Q->rear = (Q->rear + 1) % MAXSIZE;

return 1;

}

int Delete_SequenQueue(SequenQueue* Q,int *x)

{



if (SequenQueue_Empty(Q)){return 0;}

*x = Q->data[Q->front];

Q->front=(Q->front+1)% MAXSIZE;

return 1;

}

int Print_SequenQueue(SequenQueue* Q)//队列先进先出

{

if (Q->front == Q->rear) {

printf("该队列已空n"); return 0;

}

int p = Q->front;

while (Q->rear != p)

{

printf("%d", Q->data[p]);

p = (p + 1) % MAXSIZE;

}

return 1;

}

int Destroy_SequenQueue(SequenQueue* Q)//置空队列

{

int i;

Q->front = 0;

Q->rear = 0;

return 0;

}

int GetTop_linkedStack(SequenQueue* Q, int* x)

{

*x = Q->data[Q->front];

return 1;

}

void menu()

{

printf("n***********欢迎使用队列操作系统*************n");

printf("n***********1初始化队列*************n");

printf("n***********2入队*************n");

printf("n***********3出队*************n");

printf("n***********4求队列的元素个数*************n");

printf("n***********5遍历输出循环队列*************n");

printf("n***********6置空队列*************n");

printf("n***********7求队列的第一个元素*************n");

printf("n***********8打印杨辉三角形*************n");

printf("n***********请输入操作指令:*************n");

}

void YHTriangle(int n)

{

SequenQueue* Q = init_SequenQueue();

int a1, a2; int i, k;

printf("%dn", 1);

Enter_SequenQueue(Q, 1); Enter_SequenQueue(Q, 1);

for (int i = 2; i <= n; i++)//打印第i行数据元素

{

Enter_SequenQueue(Q, 1);//i进第一个

for (int k = 0; k <= i - 2; k++)//i+1进第2-n-2个

{

Delete_SequenQueue(Q, &a1);

printf("%dt", a1);

GetTop_linkedStack(Q, &a2);

Enter_SequenQueue(Q, a1 + a2);

}

Delete_SequenQueue(Q, &a2);

printf("%dn", a2);

Enter_SequenQueue(Q, 1);//进最后一个

}

}







int main()

{

SequenQueue *Q= init_SequenQueue();

menu();

while (1)

{

int c;

scanf("%d", &c);

if (c < 1 || c>8)

{

printf("输入错误请重新输入n");

scanf("%d", &c);

}

switch (c) {

case 1: {Q = init_SequenQueue(); printf("循环队列初始化成功n"); printf("该操作完成请输入下一步指令n");

} break;

case 2: {

printf("请输入要入队的元素个数n");

int num;

scanf("%d", &num);

for (int i = 0; i < num; i++)

{

int n;

scanf("%d", &n);

Enter_SequenQueue(Q, n);

}

printf("该操作完成请输入下一步指令n"); } break;

case 3: {printf("请输入出队的元素个数n");

int m;

scanf("%d", &m);

for (int i = 0; i < m; i++)

{

int x;

Delete_SequenQueue(Q,&x);

}printf("该操作完成请输入下一步指令n"); }break;

case 4: {int p = SequenQueue_Length(Q);

printf("该循环队列长度为:%d", p); printf("该操作完成请输入下一步指令n"); } break;

case 5: {Print_SequenQueue(Q); printf("该操作完成请输入下一步指令n"); } break;

case 6:{Destroy_SequenQueue(Q); printf("该操作完成请输入下一步指令n");

} break;

case 7: {int b; GetTop_linkedStack(Q, &b);

printf("队列的第一个元素: %d", b); }break;

case 8: {YHTriangle(7); }break;

}

}

}

链队列:

# define  _CRT_SECURE_NO_WARNINGS

# include "stdio.h"

# include "stdlib.h"

typedef  int elemtype;

typedef struct linkQueueNode//

{

elemtype data;

struct linkQueueNode* next;

}linkQueueNode;

typedef struct LQueue

{

struct linkQueueNode* front;

struct linkQueueNode* rear;

}LQueue, * linkQueue;

linkQueue  init_linkQueueNode()

{

linkQueue Q = (linkQueue)malloc(sizeof(LQueue));//为链队的头尾指针分配存储空间

linkQueueNode* head = (linkQueueNode*)malloc(sizeof(linkQueueNode));//为链队的头节点分配存储空间

head->next = NULL;

Q->front = head;

Q->rear = head;

return Q;

 }

int linkQueueNode_Empty(linkQueue Q)

{

if (Q->front == Q->rear)

return 1;

else

return 0;

}

int Enter_linkQueueNode(linkQueue Q, elemtype x)

{

linkQueueNode* node = (linkQueueNode*)malloc(sizeof(linkQueueNode));

    node->data = x;

node->next = NULL;

Q->rear->next = node;

Q->rear = node;

return 0;

}

int delete_linkQueueNode(linkQueue Q)//队列先进先出

{

if (linkQueueNode_Empty(Q)) return 0;

else {

linkQueueNode* p;

int m = Q->front->data;

p = Q->front->next;

Q->front->next = p->next;

free(p);

return 1;

}

}

int Length_linkQueueNode(linkQueue Q)

{

int i = 0;

linkQueueNode* p;

p = Q->front->next;

while(p!=NULL)

{

i++; p = p->next;

}

printf("链表长度为:%d", i);

return i;

}

void print_linkQueueNode(linkQueue Q)//从前往后打印

{

linkQueueNode* p;

p= Q->front->next;

while (p != NULL)

{

printf("%dt", p->data);

p = p->next;

}

}

void Destroy_SequenQueue(linkQueue Q)

{

Q->front ->next= NULL;

Q->rear ->next= NULL;

}



void menu()

{

printf("n***********欢迎使用队列操作系统*************n");

printf("n***********1初始化队列*************n");

printf("n***********2入队*************n");

printf("n***********3出队*************n");

printf("n***********4求队列的元素个数*************n");

printf("n***********5遍历输出循环队列*************n");

printf("n***********6置空队列*************n");

printf("n***********请输入操作指令:*************n");

}

int main()

{

linkQueue Q = init_linkQueueNode();

menu();

while (1)

{

int c;

scanf("%d", &c);

if (c < 1 || c>6)

{

printf("输入错误请重新输入n");

scanf("%d", &c);

}

switch (c) {

case 1: {Q = init_linkQueueNode(); printf("循环队列初始化成功n"); printf("该操作完成请输入下一步指令n");

} break;

case 2: {

printf("请输入要入队的元素个数n");

int num;

scanf("%d", &num);

for (int i = 0; i < num; i++)

{

int n;

scanf("%d", &n);

Enter_linkQueueNode(Q, n);

}

printf("该操作完成请输入下一步指令n"); } break;

case 3: {printf("请输入出队的元素个数n");

int m;

scanf("%d", &m);

for (int i = 0; i < m; i++)

{

delete_linkQueueNode(Q);

}printf("该操作完成请输入下一步指令n"); }break;

case 4: {int p = Length_linkQueueNode(Q);

printf("该队列长度为:%d", p); printf("该操作完成请输入下一步指令n"); } break;

case 5: {print_linkQueueNode(Q); printf("该操作完成请输入下一步指令n"); } break;

case 6: {Destroy_SequenQueue(Q); printf("该操作完成请输入下一步指令n");

} break;

}

}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/656826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号