数据结构 循环队列的顺序存储与链式存储

数据结构 循环队列的顺序存储与链式存储,第1张

数据结构 循环队列的顺序存储与链式存储

循环队列的顺序存储

#include
#include
#define MaxSize 10

typedef int QElemType;

typedef struct{     //对循环队列的结点的结构体进行定义
    QElemType data[MaxSize];
    int front;      //头指针指向队首元素
    int rear;       //尾指针指向队尾元素的下一个位置
}SqQueue;

int InitQueue(SqQueue *Q){//初始化队列
    Q->front=0;
    Q->rear=0;
    return 1;
}

int Length(SqQueue *Q){//求队列长度
    int len=(Q->rear-Q->front+MaxSize)%MaxSize;
    return len;
}

int EnQueue(SqQueue *Q,QElemType e){//入队列
    if(Length(Q)+1==MaxSize){
        printf("队列已满,数值%d无法进入n",e);
        return 0;
    }
    Q->data[Q->rear]=e;
    Q->rear=(Q->rear+1)%MaxSize;
    return 1;
}

int DeQueue(SqQueue *Q,QElemType *e){//出队列
    if(Q->rear==Q->front){
        printf("队列已空,无法出队列n");
        return 0;
    }
    *e=Q->data[Q->front];
    Q->front=(Q->front+1)%MaxSize;
    return 1;
}

void Print(SqQueue *Q){
    int i=0;
    printf("n");
    if(Q->front>Q->rear){
        while(Q->front+i==MaxSize){
            printf("%d  ",Q->data[Q->front+i]);
            i++;
        }
        i=0;
        while(i!=Q->rear){
            printf("%d  ",Q->data[i]);
            i++;
        }
    }
    else{
        i=Q->front;
        while(i!=Q->rear){
            printf("%d  ",Q->data[i]);
            i++;
        }
    }
    printf("n");
}

int main(){
    
    
    SqQueue Q;
    InitQueue(&Q);
    do{
		printf("   请选择要进行的 *** 作:          n");
		printf("   1 创建一个循环队列   2 入队   3 出队    4 打印   0 退出       n");
		int select;
		scanf("%d", &select);
		if(select == 0)
			break;
		switch(select){
		case 0:
			break;
		case 1:
			printf("要创建的循环队列长度为:");
			int n;//要创建的循环队列长度
    		scanf("%d",&n);
    		printf("请依次输入元素:");
    		int an; 
    		for(int i=0;i 

循环队列的链式存储

#include
#include
using namespace std;

//定义链队列 
typedef struct Haha{
	int data;
	struct Haha *next;	
}Haha, *que;

typedef struct{
	que front;
	que rear;
}link;

//对链队列初始化
void Init(link *q){
	q->front = q->rear = (que)malloc(sizeof(Haha));
	if(!(q->front)) 
		exit(1);
	q->front->next = 0;
} 

//插入新元素
void En(link *q, int e){
	que p;
	p = (que)malloc(sizeof(Haha));
	if(!p)    exit(1);
	p->data = e;
	p->next = 0;
	q->rear->next = p;
	q->rear = p;
}

//删除队头元素
int de(link *q){
	Haha *p;
	int e;
	if(q->front==q->rear)  return -1;
	p = q->front->next;
	e=p->data;
	q->front->next = p->next;
	if(q->rear == p)
		q->rear = q->front;
	free(p);
	cout << e << endl; 
	return 0;
}

//输出队列元素
void out(link *q){
	Haha *r=q->front->next;
	while(r){
		cout << r->data<<' ';
		r = r->next;
	} 
	cout << endl;
} 

//求队列长度
int len(link *q){
	Haha *r=q->front->next;
	int s = 0;
	while(r){
		r=r->next;
		s++;
	} 
	return s;
} 

int main(){
	link Q;
	Init(&Q);
	do{
		printf("   请选择要进行的 *** 作:          n");
		printf("   1 创建一个链队列   2 入队   3 出队    4 打印   0 退出       n");
		int select;
		scanf("%d", &select);
		if(select == 0)
			break;
		switch(select){
		case 0:
			break;
		case 1:
			printf("要创建的循环队列长度为:");
			int n;//要创建的循环队列长度
    		scanf("%d",&n);
    		printf("请依次输入元素:");
    		int an; 
    		for(int i=0;i					
										


					

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

原文地址: http://outofmemory.cn/zaji/5670142.html

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

发表评论

登录后才能评论

评论列表(0条)

保存