数据结构——队列操作

链表

/*q.f中的数据域不存内容,q.rear的数据域中是有内容的*/
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
	int data;
	struct Node *next;
}Node;
typedef struct Queue{
	Node *f,*r;
}Q;
void init(Q *q){
	q->f = q->r = (Node *)malloc(sizeof(Node));
	q->f->next = NULL;//q->f->data的值为NULL,这个域不会被用到(把q->f当做头指针来用)
}
//入队
void enQueue(Q *q,int x){
	Node *p = (Node*)malloc(sizeof(Node));//创造新的插入结点
	p->next = NULL;
	p->data = x;
	q->r->next = p;//插在队尾
	q->r = P;//改变rear的指向
}
//出队
void delQueue(Q *q,int *x){
	if(q->f != q->r){
		Node *p = q->f->next;//注意p的类型
		*x = p->data;//记录出队的数据
		q->f->next = p->next;//改变头指针的指向
		free(p);
	}
}
//遍历
void travel(){
	Node *p;
	for(p = q.f->next;p!=NULL;p = p->next){//p = q.f->next;而不会p = q.f; 因为要把q.f当做头指针来用,其数据域是没有内容的
		printf("%3d\n",p->data);
	}
}

int main(void){
	Q myq;
	int t;
	init(&myq);
	enQueue(&myq,11);
	enQueue(&myq,22);
	enQueue(&myq,33);
	enQueue(&myq,44);
	travel(myq);
	delQueue(&myq,&t);
	printf("\n deleted the element %d",t);
	return 0;
}

数组(循环队列)

#include <stdio.h>
#include <stdlib.h>
typedef struct Queue
{
	int arr[10];//会空出一个出来
	int front, rear;
}Q;
void init(Q* a_q)
{
	a_q->front = a_q->rear = 0;
}
void enqueue(Q* a_q, int x)
{
	if ((a_q->rear + 1) % 10 != a_q->front)//当a_q->rear==9时(即前面已经存入了9个元素),便不可再入队元素
	{
	   // printf("%d\n",a_q->front);
        printf("%d\n",a_q->rear);
	   // printf("%d\n",(10 + a_q->rear + 1) % 10);
		a_q->arr[a_q->rear] = x;
		a_q->rear = (a_q->rear + 1) % 10;
	}
}

//出队
void delqueue(Q*a_q, int *x)
{
	if (a_q->front != a_q->rear)//是否是空
	{
		*x = a_q->arr[a_q->front];
		a_q->front = (a_q->front + 1) % 10;//front向前移动,之后可以进行入队操作
	}
}
//遍历
void travel(Q* aq)
{
	int i;
	for (i = aq->front; i != aq->rear; i=(i+1)%10)//从0号开始输出
	{
		printf("%5d\t", aq->arr[i]);
	}
}

int main(void) {
	Q myq;
	int t;
	init(&myq);
	enqueue(&myq, 1);
	enqueue(&myq, 2);
	enqueue(&myq, 33);
	enqueue(&myq, 44);
	enqueue(&myq, 55);
	enqueue(&myq, 6);
	enqueue(&myq, 7);
	enqueue(&myq, 8);
	enqueue(&myq, 9);
	//enqueue(&myq, 10);//实际存入的只有前九个元素,10不会入队成功
	travel(&myq);
	delqueue(&myq, &t);
	enqueue(&myq, 10);//此时,10可以入队,因为由9个变成了8个
	printf("out%d\n",t);
	travel(&myq);
	return 0;
}



发布了33 篇原创文章 · 获赞 5 · 访问量 685

猜你喜欢

转载自blog.csdn.net/u013140841/article/details/103832044