建立数据元素值为字符型的顺序队列

来源:互联网 发布:石家大唐数据招聘 编辑:程序博客网 时间:2024/04/30 05:22
#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<time.h>#define ElemType char#define SIZE 30//队列的最大长度typedef struct QNode{ElemType *base;//初始化的分配存储空间int front;//头指针针,若队列不空,则指向队头元素int rear;//尾指针,若队列不空,则指向队尾元素的下一个元素}SqQueue;int InitQueue(SqQueue &Q)//初始化一个空队列{Q.base=(ElemType *)malloc(SIZE*sizeof(ElemType));//队列基址指针if(Q.base == NULL)//若分配内存失败{printf("存储分配失败!\n\n");return -1;}Q.front=Q.rear=0;//初始化队头和队尾指针return 1;}int Assignment(SqQueue &Q)//为队列中的元素赋值{srand((unsigned)time(NULL));for(int i=0;i<10;i++)//往队列中添加10个数据{if((Q.rear+1)%SIZE == Q.front)break;Q.base[Q.rear]=(char)(rand()%26+'a');Q.rear=(Q.rear+1)%SIZE;//队尾指针前进一位}return 1;}int DisplayQueue(SqQueue Q)//从队头到队尾依次打印队列中的元素{if(Q.rear == Q.front){printf("当前队列为空!\n\n");return -1;}int p=Q.front;//令p指向队头while( (p+1) != Q.rear)//输出前面的元素{printf("%c - ",Q.base[p]);p=(p+1)%SIZE;}printf("%c\n\n",Q.base[p]);//输出最后一个元素return 1;}int QueueLength(SqQueue Q)//获取队列长度,即当前队列中数据元素的个数{int len=(Q.rear-Q.front+SIZE)%SIZE;printf("当前队列长度为:%d\n\n",len);return 1;}int GetHead(SqQueue Q)//获取队头元素的值{if(Q.front == Q.rear){printf("当前队列为空!\n\n");return -1;}char e=Q.base[Q.front];printf("当前队头元素为:%c\n\n",e);return 1;}int EnQueue(SqQueue &Q)//在队尾插入新的元素作为新的队尾{if((Q.rear+1)%SIZE == Q.front){printf("当前队列已满!\n\n");return -1;}char e;printf("请输入你要插入队尾的字符:");scanf("%c",&e);Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%SIZE;//队尾指针前进一位return 1;}int DeQueue(SqQueue &Q)//删除队头元素{if(Q.rear == Q.front){printf("当前队列已空!\n\n");return -1;}char e=Q.base[Q.front];printf("被删除的队头元素为:%c\n\n",e);Q.front=(Q.front+1)%SIZE;//队头指针前进一位return 1;}int main(){SqQueue Q;InitQueue(Q);//初始化一个队列QAssignment(Q);//为队列生成一些用于测试的数据DisplayQueue(Q);//打印队列中的数据QueueLength(Q);//求队列长度//GetHead(Q);//EnQueue(Q);//DeQueue(Q);return 1;}

原创粉丝点击