C语言- 基础数据结构和算法 - 队列的顺序存储

2022/6/12 1:20:28

本文主要是介绍C语言- 基础数据结构和算法 - 队列的顺序存储,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

听黑马程序员教程《基础数据结构和算法 (C版本)》,

照着老师所讲抄的,

视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1

喜欢的朋友可以去看看,欢迎大家一起交流学习。

/*
    队列:先进先出,后进后出,像排队一样。
    队头:队伍的前面(出口)。
    队尾:队伍的后面(入口)。
    插入:从队尾插入。
    出队:从队头删除。
*/

SeqQueue.h

 1 #ifndef SEQQUEUE_H
 2 #define SEQQUEUE_H
 3 
 4 #include <stdio.h>
 5 #include <stdlib.h>
 6 
 7 #define MAX_SIZE 1024
 8 
 9 // 顺序队列结构体 
10 typedef struct SEQQUEUE{
11     void* data[MAX_SIZE]; 
12     int size;
13 }SeqQueue;
14 
15 
16 
17 // 初始化
18 SeqQueue* Init_SeqQueue();
19 
20 // 入队
21 void Push_SeqQueue(SeqQueue* queue,void* data);
22 
23 // 返回队头元素
24 void* Front_SeqQueue(SeqQueue* queue);
25 
26 // 出队
27 void Pop_SeqQueue(SeqQueue* queue);
28 
29 // 返回队尾元素
30 void* Back_SeqQueue(SeqQueue* queue);
31 
32 // 返回大小
33 int Size_SeqQueue(SeqQueue* queue); 
34 
35 // 清空队列
36 void Clear_SewqQueue(SeqQueue* queue);
37 
38 // 销毁
39 void FreeSpace_SeqQueue(SeqQueue* queue); 
40 
41 #endif

SeqQueue.c

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 
  4 #include "SeqQueue.h"
  5 
  6 
  7 // 初始化
  8 SeqQueue* Init_SeqQueue(){
  9     
 10     // 申请内存
 11     SeqQueue* queue = (SeqQueue*)malloc(sizeof(SeqQueue)); 
 12     
 13     int i;
 14     for(i=0;i<_MAX_EXT;i++){
 15         queue->data[i]=NULL;
 16     }
 17     queue->size = 0;
 18     
 19     return queue;
 20 }
 21 
 22 // 入队
 23 void Push_SeqQueue(SeqQueue* queue,void* data){
 24     
 25     if(queue==NULL){
 26         return;
 27     }
 28     if(data==NULL){
 29         return;
 30     }
 31     if(queue->size == _MAX_EXT){        // 位置不够了就不能插入了。 
 32         return;
 33     }
 34     
 35     // 把数组的左边设为“队头”,插入的时候从右边插入,也就是从尾部位置插入。
 36     queue->data[queue->size] = data;
 37     queue->size ++; 
 38     
 39 }
 40 
 41 // 返回队头元素(第1个元素,也就是位置0的元素) 
 42 void* Front_SeqQueue(SeqQueue* queue){
 43     
 44      if(queue == NULL){
 45          return;
 46      }
 47      if(queue->size == 0){
 48          return;
 49     }
 50     
 51     return queue->data[0];
 52 }
 53 
 54 // 出队,删除最左边(0位置)元素,然后把后面元素前移。 
 55 void Pop_SeqQueue(SeqQueue* queue){
 56      if(queue == NULL){
 57          return;
 58      }
 59      if(queue->size == 0){
 60          return;
 61     }    
 62     // 前移元素
 63     int i;
 64     for(i=0;i<queue->size-1;i++){
 65         queue->data[i] = queue->data[i+1];
 66     }
 67     
 68     queue->size--;
 69         
 70 }
 71 
 72 // 返回队尾元素
 73 void* Back_SeqQueue(SeqQueue* queue){
 74      if(queue == NULL){
 75          return NULL;
 76      }
 77      if(queue->size == 0){
 78          return NULL;
 79     }    
 80     
 81     return queue->data[queue->size-1];
 82 }
 83 
 84 // 返回大小
 85 int Size_SeqQueue(SeqQueue* queue){
 86      if(queue == NULL){
 87          return -1;
 88      }
 89     
 90     return queue->size;
 91 }
 92 
 93 // 清空队列
 94 void Clear_SewqQueue(SeqQueue* queue){
 95      if(queue == NULL){
 96          return ;
 97      }
 98     int i;
 99     for(i=0;i<_MAX_EXT;i++){
100         queue->data[i]=NULL;
101     }
102     queue->size = 0;    
103     
104 }
105 
106 // 销毁
107 void FreeSpace_SeqQueue(SeqQueue* queue){
108      if(queue == NULL){
109          return ;
110      }    
111     
112     free(queue);
113     
114 }

07 队列的顺序存储20220611_main.c

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 #include "SeqQueue.c"
 6 
 7 /* 
 8     队列:先进先出,后进后出,像排队一样。
 9     队头:队伍的前面(出口)。
10     队尾:队伍的后面(入口)。
11     插入:从队尾插入。
12     出队:从队头删除。
13 */ 
14 
15 // 用户数据
16 typedef struct PWESON{
17     char name[32];
18     int age;
19 }Person; 
20 
21 int main(){
22     printf("好好学习,天天向上~!\t\t\t 队列的顺序存储20220611\n\n");
23     
24     // 创建队列
25     SeqQueue* queue = Init_SeqQueue(); 
26     
27     // 创建数据
28     Person p1,p2,p3,p4,p5;
29     strcpy(p1.name,"aaa"); 
30     strcpy(p2.name,"bbb"); 
31     strcpy(p3.name,"ccc"); 
32     strcpy(p4.name,"ddd"); 
33     strcpy(p5.name,"eee"); 
34     p1.age=18;
35     p2.age=19;
36     p3.age=20;
37     p4.age=21;
38     p5.age=22;
39  
40      // 入队
41     Push_SeqQueue(queue,&p1); 
42     Push_SeqQueue(queue,&p2); 
43     Push_SeqQueue(queue,&p3); 
44     Push_SeqQueue(queue,&p4); 
45     Push_SeqQueue(queue,&p5); 
46     
47     // 输出队尾元素
48     Person* p_back = (Person*)Back_SeqQueue(queue);
49     printf("p_back:\nname:%s\t age:%d \n\n",p_back->name,p_back->age); 
50     
51     // 输出队头元素,并且出队 
52     while(Size_SeqQueue(queue)>0){
53         
54         // 返回队头元素
55         Person* p = (Person*)Front_SeqQueue(queue);
56         printf("name:%s\t age:%d \n",p->name,p->age);
57          
58          // 出队
59         Pop_SeqQueue(queue); 
60         
61     } 
62     
63     // 销毁
64     FreeSpace_SeqQueue(queue);    
65     printf("\n\n"); 
66     system("pause");    
67     return 0;
68 }

 



这篇关于C语言- 基础数据结构和算法 - 队列的顺序存储的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程