ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2022-06-11 14:34:57  阅读:137  来源: 互联网

标签:NULL return SeqQueue C语言 queue void 数据结构 顺序存储 size


听黑马程序员教程《基础数据结构和算法 (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 }

 

标签:NULL,return,SeqQueue,C语言,queue,void,数据结构,顺序存储,size
来源: https://www.cnblogs.com/stou/p/16365826.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有