求一个C语言 循环队列的插入 完整程序

求一个C语言 循环队列的插入 完整程序,第1张

(1)编写一个程序,实现顺序环形队列的各种基本运算,并在此基础上设计一个主程序完成如下功能:

(1)初始化队列q;

(2)判断队列q是否非空;

(3)依次进队元素100、909、44、8;

(4)出队一个元素,输出该元素;

(5)输出队列q的元素个数;

(6)依次进队元素-67、55、99、70;

(7)输出队列q的元素个数;

#include<stdio.h>

#include<malloc.h>

#define QUEUE_INIT_SIZE 100

#define QUEUEINCREMENT 10

#define OK 1

#define TURE 1

#define FALSE 0

#define ERROR 0

#define INFEASIBLE -1

#define OVERFLOW -2

typedef int Status

typedef int QElemType

typedef struct

{

QElemType *base

int front

int rear

}SqQueue

Status InitQueue(SqQueue &Q)

{

Q.base=(QElemType *)malloc

(QUEUE_INIT_SIZE*sizeof(QElemType))

if(!Q.base)

exit(OVERFLOW)

Q.front=Q.rear=0

return OK

}

int QueueNumElem(SqQueue Q)

{

return (Q.rear-Q.front)%QUEUE_INIT_SIZE

}

Status EnQueue(SqQueue &Q,QElemType e)

{

if((Q.rear+1)%QUEUE_INIT_SIZE==Q.front)

return ERROR

Q.base[Q.rear]=e

Q.rear=(Q.rear+1)%QUEUE_INIT_SIZE

return OK

}

SqQueue DeQueue(SqQueue Q,int e)

{

int i

if(Q.front==Q.rear)

printf("队为空!\n")

for(i=ei<Q.reari++)

Q.base[i]=Q.base[i+1]

Q.rear--

return Q

}

int main()

{

SqQueue Q,Q1

static int qele=0

int i,j=0,k=0,m=0

static int frontd=Q.front

i=InitQueue(Q)

if(i==1)

printf("队初始化成功!!\n")

else

printf("队初始化失败!!\n")

if(Q.front!=Q.rear)

printf("队不为空!!\n")

else

printf("队为空L!!\n")

printf("输入数据(END of '9999'):")

scanf("%d",&qele)

while(qele!=9999||Q.rear==Q.front)

{

EnQueue(Q,qele)

scanf("%d",&qele)

}

frontd=Q.front

while(Q.rear!=Q.front)

{

printf(" %d ",Q.base[Q.front])

Q.front++

j++

}

printf("\n")

Q.front=frontd

printf("输入要出队的元素:")

scanf("%d",&j)

while(Q.front!=Q.rear)

{

if(Q.base[Q.front]==j)

{

printf("%d\n",Q.base[Q.front])

Q=DeQueue(Q,Q.front)

m++

break

}

Q.front++

}

Q.front=frontd

while(Q.front!=Q.rear)

{

printf(" %d ",Q.base[Q.front])

Q.front++

}

printf("\n")

Q.front=frontd

printf("队的长度:%d\n",Q.rear-Q.front)

printf("输入数据(END of '9999'):")

scanf("%d",&qele)

while(qele!=9999||Q.rear==Q.front)

{

EnQueue(Q,qele)

scanf("%d",&qele)

}

Q.front=frontd

printf("队的长度:%d\n",Q.rear-Q.front)

Q.front=frontd

printf("出队顺序:")

while(Q.rear!=Q.front)

{

printf(" %d ",Q.base[Q.front])

Q=DeQueue(Q,Q.front)

m++

}

printf("end\n")

Q.front=0

Q.rear=m

while(Q.rear!=Q.front)

{

free(Q.base)

//Q.base++

Q.front++

if(Q.rear-1==Q.front)

printf("队已经释放!\n")

}

return 0

}

这是字符串的冒泡排序,排序依据是字符串的先后(即第一个不同字符的ACSII码之差)。参阅百度百科-冒泡排序。

用两个循环是为了将所有内容排序。最外层控制比较次数,内层控制比较范围。

比如你的数组中含5个字符串,比较五轮(其实四轮就可以了),i=0时,j为0-4,把s[0]-s[4]中最大的排到最后面去(s[4]),i=1时,j为0-3,把s[0]-s[3]中最大的排到最后面去(s[3]),以此类推。如果没有内层循环,那么只能把最大的排到最后,不能对整个数组排序。

求采纳。

#include<stdio.h>

#include<process.h>

#include<iostream.h>

#include<stdlib.h>#define MaxSize 100

typedef int ElemType

typedef struct

{

ElemType data[MaxSize]

int front

int rear

}CircSeqQueue//顺序循环队列的初始化

void QueueInitial(CircSeqQueue *pQ)

{

//创建一个又指针pQ所指向的空顺序循环队列

pQ->front=pQ->rear=0

}//顺序循环队列判空

int IsEmpty(CircSeqQueue *pQ)

{//顺序循环队列为空时返回1,否则返回0

return pQ->front==pQ->rear

}//顺序循环队列判满

int IsFull(CircSeqQueue *pQ)

{//循环队列为满时返回1,否则返回0

return (pQ->rear+1)%MaxSize==pQ->front

}//元素进队

void EnQueue(CircSeqQueue *pQ, ElemType e)

{//若队列不满,则元素e进队

if(IsFull(pQ))//队列已满,退出

{

printf("队列溢出!\n")

exit(1)

}

pQ->rear=(pQ->rear+1)%MaxSize//队尾指针后移

pQ->data[pQ->rear]=e

}//元素出队

ElemType DeQueue(CircSeqQueue *pQ)

{//若循环队列不为空,则删除队头元素,并返回它的值

if(IsEmpty(pQ))//队列为空,退出

{

printf("空队列!\n")

exit(1)

}

pQ->front=(pQ->front+1)%MaxSize//队头指针后移

return pQ->data[pQ->front]

}//取队头元素

ElemType GetFront(CircSeqQueue *pQ)

{//若队列不为空,则返回队头元素的值

if(IsEmpty(pQ))

{

printf("空队列!\n")

exit(1)

}

return pQ->data[(pQ->front+1)%MaxSize]

}//循环队列置空

void MakeEmpty(CircSeqQueue *pQ)

{//将由指针pQ所指向的队列变为孔队

pQ->front=pQ->rear=0

} void output()

{

int i

for(i=0i<32i++)

printf("+")

printf("\n")

printf("1.元素进队\n")

printf("2.元素出队\n")

printf("3.队首元素读取\n")

printf("4对列制空\n")

printf("5.退出\n")

for(i=0i<32i++)

printf("+")

printf("\n")

} void main()

{

int k,m,n,i

CircSeqQueue *pQ

ElemType e

pQ=new CircSeqQueue

QueueInitial(pQ)

output()

while(k)

{

printf("请选择:1-5\n")

scanf("%d",&m)

switch(m)

{

case 0:return

case 1:

printf("请输入入队元素的个数:\n")

scanf("%d",&n)

printf("输入元素,入队\n")

for(i=0i<ni++)

{

scanf("%d",&e)

EnQueue(pQ,e) } break

case 2:

{

printf("请输入出队元素的个数\n")

scanf("%d",&n)

for(i=0i<ni++)

{

e=DeQueue(pQ)

printf("%d\n",e)

} break

}

case 3:

{

printf("取出队首元素\n")

e=GetFront(pQ)

printf("%d\n",e)

break

}

case 4:

{

printf("队列置空\n")

MakeEmpty(pQ)

printf("\n")

break

}

default:return

}

printf("是否继续(1|0)\n")

scanf("%d",&k)

if(!k) return

}

}看下吧!不是很完善!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11549350.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存