zoukankan      html  css  js  c++  java
  • 队列的顺序存储实现

    顺序存储队列头文件:

     1 #pragma once
     2 #include<stdlib.h>
     3 #include<stdio.h>
     4 #define MAX_SIZE 1024
     5 
     6 //顺序队列结构体
     7 typedef struct SEQQUEUE
     8 {
     9     void *data[MAX_SIZE];
    10     int size;
    11 }SeqQueue;
    12 
    13 //初始化队列
    14 SeqQueue* Init_SeqQueue();
    15 //入队
    16 void Push_SeqQueue(SeqQueue* queue, void* value);
    17 //出队
    18 void Pop_SeqQueue(SeqQueue* queue);
    19 //返回队首元素
    20 void* Front_SeqQueue(SeqQueue* queue);
    21 //返回队尾元素
    22 void* Back_SeqQueue(SeqQueue* queue);
    23 //返回队列长度
    24 int Size_SeqQueue(SeqQueue* queue);
    25 //清空队列
    26 void Clear_SeqQueue(SeqQueue* queue);
    27 //销毁队列
    28 void Free_SeqQueue(SeqQueue* queue);

    顺序存储队列实现文件:

      1 #include "队列顺序存储.h"
      2 //初始化队列
      3 SeqQueue* Init_SeqQueue()
      4 {
      5     SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue));
      6     if (queue == NULL)
      7     {
      8         exit(1);
      9     }
     10 
     11     queue->size = 0;
     12     for (int i = 0; i < MAX_SIZE; ++i)
     13     {
     14         queue->data[i] = NULL;
     15     }
     16 
     17     return queue;
     18 }
     19 //入队数组左边做队头
     20 void Push_SeqQueue(SeqQueue* queue, void* value)
     21 {
     22     if (queue == NULL)
     23     {
     24         exit(1);
     25     }
     26 
     27     if (value == NULL)
     28     {
     29         exit(1);
     30     }
     31 
     32     if (queue->size == MAX_SIZE)
     33     {
     34         exit(1);
     35     }
     36 
     37     queue->data[queue->size] = value;
     38     queue->size++;
     39 }
     40 //出队
     41 void Pop_SeqQueue(SeqQueue* queue)
     42 {
     43     if (queue == NULL)
     44     {
     45         exit(1);
     46     }
     47 
     48     if (queue->size == 0)
     49     {
     50         exit(1);
     51     }
     52 
     53     for (int i = 0; i < queue->size-1; ++i)
     54     {
     55         queue->data[i] = queue->data[i + 1];
     56     }
     57     queue->size--;
     58 }
     59 //返回队首元素
     60 void* Front_SeqQueue(SeqQueue* queue)
     61 {
     62     if (queue == NULL)
     63     {
     64         exit(1);
     65     }
     66 
     67     if (queue->size == 0)
     68     {
     69         exit(1);
     70     }
     71 
     72     return queue->data[0];
     73 }
     74 //返回队尾元素
     75 void* Back_SeqQueue(SeqQueue* queue);
     76 //返回队列长度
     77 int Size_SeqQueue(SeqQueue* queue)
     78 {
     79     if (queue == NULL)
     80     {
     81         exit(1);
     82     }
     83 
     84     return queue->size;
     85 }
     86 //清空队列
     87 void Clear_SeqQueue(SeqQueue* queue)
     88 {
     89     if (queue == NULL)
     90     {
     91         exit(1);
     92     }
     93 
     94     queue->size = 0;
     95 }
     96 //销毁队列
     97 void Free_SeqQueue(SeqQueue* queue)
     98 {
     99     if (queue == NULL)
    100     {
    101         exit(1);
    102     }
    103     
    104     for (int i = 0; i < MAX_SIZE; ++i)
    105     {
    106         queue->data[i] = NULL;
    107     }
    108     queue->size = 0;
    109     free(queue);
    110     
    111 }

    顺序存储队列测试文件:

     1 #include"队列顺序存储.h"
     2 #include<string.h>
     3 #include<stdlib.h>
     4 #include<stdio.h>
     5 
     6 #define M 8
     7 #define N 3
     8 //数据元素结构体
     9 typedef struct PERSON
    10 {
    11     char name[64];
    12     int age;
    13 }Person;
    14 
    15 int main()
    16 {
    17     //创建循环链表
    18     SeqQueue* queue = Init_SeqQueue();
    19 
    20     //创建数据
    21     Person p1 = { "aaa",10 };
    22     Person p2 = { "bbb",20 };
    23     Person p3 = { "ccc",30 };
    24     Person p4 = { "ddd",40 };
    25     Person p5 = { "eee",50 };
    26 
    27     //入队
    28     Push_SeqQueue(queue, (Person*)&p1);
    29     Push_SeqQueue(queue, (Person*)&p2);
    30     Push_SeqQueue(queue, (Person*)&p3);
    31     Push_SeqQueue(queue, (Person*)&p4);
    32     Push_SeqQueue(queue, (Person*)&p5);
    33     
    34     //返回队首元素
    35     Person* temp = (Person*)Front_SeqQueue(queue);
    36     printf("value: %s age: %d
    ", temp->name, temp->age);
    37 
    38     //出队
    39     Pop_SeqQueue(queue);
    40     
    41     //返回队首元素
    42     temp = (Person*)Front_SeqQueue(queue);
    43     printf("value: %s age: %d
    ", temp->name, temp->age);
    44 
    45     int size = Size_SeqQueue(queue);
    46     printf("长度%d
    ", size);
    47 
    48     //清空队列
    49     Clear_SeqQueue(queue);
    50 
    51     size = Size_SeqQueue(queue);
    52     printf("长度%d
    ", size);
    53     //销毁队列
    54     Free_SeqQueue(queue);
    55     return 0;
    56 }

    测试结果:

  • 相关阅读:
    将参数传递给线程(Vc#2005)
    ADO.NET更新ACCESS碰到的怪异问题
    MVCRESTSilverLight 之 MapServiceRoute
    MEF Export 和 Import 委托
    MVCRESTSilverLight 之MainPage.xaml.cs
    设计模式访问者
    MVCRESTSilverLight 之 ViewModels\MainViewModel.cs
    MVCRESTSilverLight 之Api\CustomerApi.cs
    MVCRESTSilverLight 之 RestExample.Model.Silverlight\Customer.cs
    MVCRESTSilverLight 之 HttpConfiguration
  • 原文地址:https://www.cnblogs.com/dhhu007/p/13498050.html
Copyright © 2011-2022 走看看