首页 > 代码库 > 简单数据结构之队列模拟
简单数据结构之队列模拟
1 /************************************************************************************** 2 * Function : 模拟队列 3 * Create Date : 2014/04/23 4 * Author : NTSK13 5 * Email : beijiwei@qq.com 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性。 7 * 任何单位和个人不经本人允许不得用于商业用途 8 * Version : V0.1 9 *************************************************************************************** 10 题目:简单数据结构之队列模拟 11 12 **************************************************************************************/ 13 #include<stdio.h> 14 15 #define MY_FUNC 1 16 #if MY_FUNC 17 18 #define M 10 //队列最大长度 19 20 typedef struct queue 21 { 22 int data[M]; 23 int len;//队列当前长度 24 }Queue; 25 26 int sample[M]; 27 int result[M]; 28 29 void init_queue(Queue *a);//队列初始化 30 int in_queue(Queue *a,int value);//进队 31 int out_queue(Queue *a);//出队 32 int get_head_element(Queue *a);//获取队首的元素 33 34 // The first method: 35 int main() 36 { 37 int i=0; 38 Queue sq; 39 init_queue(&sq); 40 41 freopen("input.txt","r",stdin); 42 43 for(i=0;i<M;i++) 44 scanf("%d",&sample[i]); // get input data 45 out_queue(&sq); 46 get_head_element(&sq); 47 48 for(i=0;i<M;i++) 49 in_queue(&sq,sample[i]); 50 in_queue(&sq,100); 51 52 for(i=0;i<M;i++) 53 result[i]=out_queue(&sq); 54 55 for(i=0;i<M;i++) 56 { 57 printf("%d\t",result[i]); 58 fflush(stdout);//修复Eclipse printf()不能显示的小bug 59 } 60 61 printf("\n"); 62 fflush(stdout); 63 64 return (0); 65 } 66 67 void init_queue(Queue *a)//队列初始化 68 { 69 (*a).len=0; 70 } 71 //该种情况,进队效率太低 72 int in_queue(Queue *a,int value)//进队 73 { 74 int i=0; 75 if( (*a).len==M) 76 { 77 printf("Queue is full ,can not in !!!\n"); 78 fflush(stdout); 79 return (-1); 80 }else{ 81 if((*a).len==0) 82 { 83 (*a).data[0]=value; 84 (*a).len++; 85 return (1); 86 }else 87 { 88 for(i=(*a).len;i>0;i--) 89 { 90 (*a).data[i]=(*a).data[i-1]; 91 } 92 (*a).data[0]=value; 93 (*a).len++; 94 return (1); 95 } 96 } 97 } 98 int out_queue(Queue *a) 99 { 100 int tmp=0; 101 if((*a).len==0) 102 { 103 printf("Queue is empty ,can not out !!!\n"); 104 fflush(stdout); 105 return (-1); 106 }else{ 107 tmp=(*a).len-1; 108 (*a).len--; 109 return ( (*a).data[tmp]); 110 } 111 } 112 int get_head_element(Queue *a) 113 { 114 if( (*a).len==0) 115 { 116 printf("Queue is empty full ,can not get !!!\n"); 117 fflush(stdout); 118 return (-1); 119 }else{ 120 return ( (*a).data[ (*a).len -1]); 121 } 122 } 123 124 /********************************************my function end**************************************************/ 125 #else 126 127 128 #define M 10 //队列最大长度 129 130 typedef struct queue 131 { 132 int data[2*M-1];//队列最长为M 133 int head; 134 int tail; 135 int len;//队列当前长度 136 }Queue; 137 138 int sample[M]; 139 int result[M]; 140 141 void init_queue(Queue *a);//队列初始化 142 int in_queue(Queue *a,int value);//进队 143 int out_queue(Queue *a);//出队 144 int get_head_element(Queue *a);//获取队首的元素 145 146 // The second method: 147 int main() 148 { 149 int i=0; 150 Queue sq; 151 init_queue(&sq); 152 153 freopen("input.txt","r",stdin); 154 155 for(i=0;i<M;i++) 156 scanf("%d",&sample[i]); // get input data 157 out_queue(&sq); 158 get_head_element(&sq); 159 160 for(i=0;i<M;i++) 161 in_queue(&sq,sample[i]); 162 in_queue(&sq,100); 163 164 for(i=0;i<M;i++) 165 result[i]=out_queue(&sq); 166 167 for(i=0;i<M;i++) 168 { 169 printf("%d\t",result[i]); 170 fflush(stdout);//修复Eclipse printf()不能显示的小bug 171 } 172 173 printf("\n"); 174 fflush(stdout); 175 176 return (0); 177 } 178 179 180 void init_queue(Queue *a) 181 { 182 (*a).len=0; 183 } 184 185 //这种方法 避免了 for 循环 186 int in_queue(Queue *a,int value)//进队 187 { 188 if( (*a).len==M) 189 { 190 printf("Queue is full ,can not in !!!\n"); 191 fflush(stdout); 192 return (-1); 193 }else{ 194 if((*a).len==0) 195 { 196 (*a).data[M]=value; 197 (*a).len++; 198 (*a).head=M; 199 (*a).tail=M; 200 return (1); 201 }else 202 { 203 if( (*a).tail ==0 ) 204 (*a).tail=2*M-2; 205 else 206 (*a).tail--; 207 208 (*a).data[ (*a).tail]=value; 209 (*a).len++; 210 return (1); 211 } 212 } 213 } 214 int out_queue(Queue *a) 215 { 216 int tmp=0; 217 if((*a).len==0) 218 { 219 printf("Queue is empty ,can not out !!!\n"); 220 fflush(stdout); 221 return (-1); 222 }else{ 223 tmp=(*a).head; 224 if((*a).head==0) 225 (*a).head=2*M-2; 226 else 227 (*a).head--; 228 (*a).len--; 229 return ( (*a).data[tmp]); 230 } 231 } 232 int get_head_element(Queue *a) 233 { 234 if( (*a).len==0) 235 { 236 printf("Queue is empty full ,can not get !!!\n"); 237 fflush(stdout); 238 return (-1); 239 }else{ 240 return ( (*a).data[ (*a).head ]); 241 } 242 } 243 244 #endif
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。