[数据结构]队列的基本操作

简介: 栈是先进后出,队列则是先进先出.下面贴一下队列的基本操作.1.队列的顺序表示.1.1队列的结构体定义#include #include typedef int DataType;#define MA...

栈是先进后出,队列则是先进先出.下面贴一下队列的基本操作.

1.队列的顺序表示.

1.1队列的结构体定义

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;
#define MAXNUM 20   /*队列中元素的最大个数*/
struct Seqqueue   /*顺序队列类型定义*/
{
    int f,r;
    DataType q[MAXNUM];
};

typedef struct Seqqueue Seqqueue,*PSeqqueue;

/*创建一个空队列*/
PSeqqueue createEmptyqueue(void);
/*判断队列是否为空*/
int isEmptyqueue_seq(PSeqqueue paqu);
/*在队列中插入一个元素*/
void enqueue_seq(PSeqqueue paqu,DataType x);
/*删除队头元素*/
void dequeue_seq(PSeqqueue paqu);
/*对非空队列求队头元素*/
DataType frontqueue_seq(PSeqqueue paqu);

1.2创建队列


PSeqqueue createEmptyqueue(){
    PSeqqueue paqu=(PSeqqueue)malloc(sizeof(struct Seqqueue));
    if (paqu==NULL)
    {
        printf("Out of space.\n");
    }else{
        paqu->r=paqu->f=0;
    }

    return paqu;
}

1.3队列中插入元素

void enqueue_seq(PSeqqueue paqu,DataType x){
    if ((paqu->r+1)%MAXNUM==paqu->f)
    {
        printf("Full queue.\n");
    }else{
        paqu->q[paqu->r]=x;
        paqu->r=(paqu->r+1)%MAXNUM;
    }
}

1.4删除对头元素

void dequeue_seq(PSeqqueue paqu){
    if (isEmptyqueue_seq(paqu))
    {
       printf("Empty queue\n");
    }else{
        paqu->f=(paqu->f+1)%MAXNUM;
    }
}

1.5返回对头元素


DataType frontqueue_seq(PSeqqueue paqu){
   return paqu->q[paqu->f];
}

1.6判断队列是否为空.

int isEmptyqueue_seq(PSeqqueue paqu){
    return paqu->f=paqu->r;
}

1.7测试

int main(){
    PSeqqueue queue=createEmptyqueue();
    enqueue_seq(queue,2);
    enqueue_seq(queue,3);
    enqueue_seq(queue,4);
    printf("%d\n",frontqueue_seq(queue));
    return 0;
}

2.队列的链式表示

2.1结构体定义和函数声明

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

typedef int Datatype;
struct Node;
typedef struct Node *PNode;
struct Node
 {
    Datatype info;
    PNode link;
 }; 

struct LinkQueue
{
    PNode f;
    PNode r;

};

typedef  struct LinkQueue *PLinkQueue;
//创建一个空队列
PLinkQueue createEmptyQueue_link();
//判断队列是否为空
int isEmptyQueue_link(PLinkQueue plqu);
//进队列
void enQueue_link(PLinkQueue plqu,Datatype x);
//出对列
void deQueue_link(PLinkQueue plqu);
//在非空队列中求对头元素
Datatype frontqueue_link(PLinkQueue plqu);

2.2创建队列

PLinkQueue createEmptyQueue_link(){
    PLinkQueue plqu=(PLinkQueue)malloc(sizeof(struct LinkQueue));
    if (plqu==NULL)
    {
        printf("Out of space.\n");
    }else{
        // PNode pnode=(PNode)malloc(sizeof(struct Node));
        plqu->f=plqu->r=NULL;
    }
    return plqu;
}

2.3入队列

void enQueue_link(PLinkQueue plqu,Datatype x){

   PNode pnode=(PNode)malloc(sizeof(struct Node));
   if(pnode==NULL){
     printf("Out of space.\n");
   }else{
     pnode->info=x;
     pnode->link=NULL;
         if (plqu->f==NULL)
         {
            plqu->f=pnode;
         }else{
            plqu->r->link=pnode;

         }
         plqu->r=pnode;
   }

}

2.4删除队尾元素

void deQueue_link(PLinkQueue plqu){
    PNode pnode;
    if (plqu->f==NULL)
    {
        printf("Empty Queue\n");
    }else{
       pnode=plqu->f;
       plqu->f=plqu->f->link;
       free(pnode);
    }
}

2.5返回对头元素

Datatype frontqueue_link(PLinkQueue plqu){
    printf("%d\n",plqu->f->info);
    return(plqu->f->info);
}

2.6队列是否为空

int isEmptyQueue_link(PLinkQueue plqu){
    return (plqu->f==NULL);
}

2.7测试

int main(){
     PLinkQueue p=createEmptyQueue_link();
     enQueue_link(p,5);
     enQueue_link(p,15);
     enQueue_link(p,35);
     frontqueue_link(p);
     deQueue_link(p);
     frontqueue_link(p);
    return 0;
}
目录
相关文章
|
1月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
174 9
|
22天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
初步认识栈和队列
初步认识栈和队列
64 10
|
2月前
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
26 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
36 2
|
2月前
【数据结构】-- 栈和队列
【数据结构】-- 栈和队列
20 0
|
2月前
探索数据结构:队列的的实现与应用
探索数据结构:队列的的实现与应用
|
2月前
|
存储 C语言
栈和队列题目练习
栈和队列题目练习
20 0
|
2月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
37 0