数据结构——05队列
程序员文章站
2024-03-18 11:38:46
...
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
一、队列
队列:
队列是只允许在一段进行插入,而在另一端进行删除操作的线性表。
允许插入的称谓队尾,允许删除的一端队头。
顺序队列。
循环队列,
常用操作,入队,出队。
先进先出,FIFO
二、使用步骤
1.文件结构
代码如下(示例):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.源码
代码如下(示例):
head
#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int DATATYPE;
typedef struct node
{
DATATYPE data;
struct node *next;
}QueueNode;
typedef struct queue {
QueueNode *head;
QueueNode *tail;
int clen;
}SeqQueue;
int DestroySeqQueue(SeqQueue **queue);
DATATYPE QuitSeqQueue(SeqQueue *queue);
int EnterSeqQueue(SeqQueue *queue, DATATYPE* data);
int IsEmptySeqQueue(SeqQueue *queue);
SeqQueue *CreateSeqQueue(int len);
int ClearSeqQueue(SeqQueue*queue);
int GetQueueLenth(SeqQueue*queue);
#endif
fun.c
#include "head.h"
int DestroySeqQueue(SeqQueue **queue)
{
ClearSeqQueue(*queue);
free(*queue);
*queue = NULL;
return 0;
}
DATATYPE QuitSeqQueue(SeqQueue *queue)
{
if(IsEmptySeqQueue(queue))
{
printf("IsEmptySeqQueue \n");
return -1;
}
QueueNode*temp = queue->head;
DATATYPE data;
memcpy(&data,&(temp->data),sizeof(data));
queue->head = queue->head->next;
if(queue->head == NULL)
{
queue->tail = NULL;
}
free(temp);
queue->clen--;
return data;
}
int EnterSeqQueue(SeqQueue *queue, DATATYPE* data)
{
QueueNode *newnode = malloc(sizeof(QueueNode));
if(newnode == NULL)
{
perror("malloc error");
return -1;
}
memcpy(&(newnode->data),data,sizeof(*data));
newnode->next = NULL;
if(queue->head == NULL)
{
queue->head = newnode;
queue->tail = newnode;
}
else
{
queue->tail->next = newnode;
queue->tail = newnode;
}
queue->clen++;
return 0;
}
int IsEmptySeqQueue(SeqQueue *queue)
{
return 0 == queue->clen;
}
SeqQueue *CreateSeqQueue(int len)
{
SeqQueue*temp = malloc(sizeof(SeqQueue));
if(temp == NULL)
{
perror("malloc error");
return 0;
}
temp->head = NULL;
temp->tail = NULL;
temp->clen = 0;
return temp;
}
int ClearSeqQueue(SeqQueue*queue)
{
if(queue->head != NULL)
{
QuitSeqQueue(queue);
}
queue->head = NULL;
queue->tail = NULL;
queue->clen = 0;
return 0;
}
int GetQueueLenth(SeqQueue*queue)
{
return queue->clen;
}
main.c
#include "head.h"
int main(int argc, const char *argv[])
{
int a[10] = {1,2,3,4,5,6,7,8,9,0};
int i =0;
SeqQueue*queue = CreateSeqQueue(10);
for(i=0;i<10;++i)
{
EnterSeqQueue(queue,&a[i]);
}
for(i=0;i<10;++i)
{
int data = QuitSeqQueue(queue);
printf("%d \n",data);
}
DestroySeqQueue(&queue);
return 0;
}
Makefile
OBJ=all
SRC=main.o fun.o
CC=gcc
LFLAG=-g
$(OBJ):$(SRC)
$(CC) $^ -o [email protected] $(LFLAG)
%.o:%.c
$(CC) -c $< -o [email protected]
clean:
rm $(OBJ)
disclean:
rm $(OBJ) *.o
上一篇: 科学计算工具学习笔记 四
下一篇: 堆的板子