Estrutura de dados: a realização da função básica da segunda fila do experimento

A realização da função básica da segunda fila do experimento

1. Objetivo do experimento

1. Domine o método básico de usar VC para depurar filas;
2. Domine as operações básicas de filas e realize os algoritmos de estabelecimento, inserção e exclusão de filas em dois métodos de armazenamento: representação de sequência e representação de cadeia.

2. Ambiente experimental

1. Microcomputador PC;
2. Sistema operacional Windows;
3. VC6.0 ou superior

3. Conteúdo experimental

Escolha um método de armazenamento a partir da representação da sequência da fila e da representação da cadeia e realize os algoritmos de criação, inserção e exclusão da fila; escreva programas, defina as variáveis ​​correspondentes e implemente o conteúdo do experimento na máquina.

4. Procedimentos experimentais, testes e resultados

1. Código

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>

#define ERROR  0
#define OK     1
#define TRUE   1
#define FALSE  0
#define QUEUESIZE 10

typedef int Status;
typedef int QElemtype;

typedef struct QNode{
    
    
	QElemtype *base;
	int front;
	int rear;
}SqQueue;

//初始化
void InitQueue(SqQueue *Q)
{
    
    
	Q->base=(QElemtype*)malloc(sizeof(QElemtype)*QUEUESIZE);
	assert(Q->base!=NULL);
	Q->front=Q->rear=0; 
}

//入队
Status EnQueue(SqQueue *Q,QElemtype e)
{
    
    
	if(Q->rear==QUEUESIZE)
	{
    
    
		return ERROR;
	}
	Q->base[Q->rear]=e;
	Q->rear++;
	return OK;
}

//判断是否为空
Status QueueEmpty(SqQueue *Q)
{
    
    
	if(Q->front==Q->rear)
	{
    
    
		return TRUE;
	}
	return FALSE;
}

//求长度
Status QueueLength(SqQueue Q)
{
    
    
	return Q.rear-Q.front;
}

//获取队头元素
Status GetHead(SqQueue *Q,QElemtype *e)
{
    
    
	if(Q->front==Q->rear)
	{
    
    
		return ERROR;
	}
	*e=Q->base[Q->front];
	return OK;
}

//销毁
void DestoryQueue(SqQueue *Q)
{
    
    
	if(Q->base)      //队列Q存在 
	{
    
    
		free(Q->base);
	}
	Q->base=NULL;
	Q->front=Q->rear=0;
}

//清空

void ClearQueue(SqQueue *Q)
{
    
    
	Q->front=Q->rear=0;
}

//出队
Status DeQueue(SqQueue *Q,QElemtype *e)
{
    
    
	if(Q->front==Q->rear)
	{
    
    
		return ERROR;
	}
	*e=Q->base[Q->front];
	Q->front++;
	return OK;
}

//遍历
void QueueTraverse(SqQueue Q,void(*visit)(QElemtype))
{
    
    
	int i=Q.front;
	while(i!=Q.rear)
	{
    
    
		visit(Q.base[i]);
		i++;
	}
	printf("\n");
} 
void Print(QElemtype e)
{
    
    
	printf("%d ",e);
}
//主函数
int main()
{
    
    
	QElemtype i,e,d;
	SqQueue Q;
	InitQueue(&Q);
	printf("请输入队列的%d个元素:\n",QUEUESIZE);
	for(i=0;i<QUEUESIZE;i++)
	{
    
    
		scanf("%d",&d);
		EnQueue(&Q,d);
	}
	printf("队列的元素为:");
	QueueTraverse(Q,Print);
	printf("队列长度为:%d\n",QueueLength(Q));
	int k=QueueLength(Q);
	printf("连续%d次由对头删除元素,队尾插入元素:\n",k/2);
	for(i=0;i<k/2;i++)
	{
    
    
		DeQueue(&Q,&e);
		printf("删除的队列的元素是:%d,请输入插入的元素:",e);
		scanf("%d",&d);
		EnQueue(&Q,d);
	}
	printf("新的队列元素为:\n");
	QueueTraverse(Q,Print);
	
	int n=GetHead(&Q,&e);
	if(n)printf("对头元素为:%d\n",e);
	else {
    
    
		printf("队空!\n");	return -1;
	}
	ClearQueue(&Q);
	printf("清空队列后队列是否为空:%d\t(1:为空 ,0:不为空)\n",QueueEmpty(&Q));
	DestoryQueue(&Q);
	printf("销毁队列后:\nQ.base=%u\tQ.front=%d\tQ.rear=%d\t\n",Q.base,Q.front,Q.rear);
	return 0; 
}

  1. resultado da operação
    insira a descrição da imagem aqui

5. Resumo experimental

1. Uma fila é uma tabela linear que permite apenas a inserção em uma extremidade e a exclusão na outra extremidade. O final que permite a inserção é o final da fila e o final que permite a exclusão é o início da fila.
2. O armazenamento sequencial é implementado com arrays. Por exemplo, existe uma fila com n elementos. O final do array subscript 0 é o início da fila. A operação de entrada na fila é adicionar um a um através do array subscript sem mover elementos, mas se você excluir a fila O elemento principal, os seguintes elementos irão avançar e a complexidade de tempo correspondente é O(n).

Acho que você gosta

Origin blog.csdn.net/chengzilhc/article/details/104677294
Recomendado
Clasificación