1 //基本線性隊列 2 #include<iostream> 3 4 using namespace std; 5 6 typedef struct _NODE_ 7 { 8 9 int a; 10 _NODE_* pNext; 11 }Node,*pNode; 12 13 14 class CQueue 15 { 16 private: 17 pNode m_pTop; 18 pNode m_pBase; 19 int iNodeCount; 20 21 22 public: 23 CQueue() 24 { 25 26 m_pTop = m_pBase = NULL; 27 iNodeCount = 0; 28 } 29 30 ~CQueue() 31 { 32 33 } 34 35 bool IsEmpty(); 36 void InitQueue(); 37 bool InQueue(int a); 38 bool OutQueue(int& a); 39 void DestroyQueue(); 40 bool GetQueueLenth(int& a); 41 bool GetQueueTop(int& a); 42 43 44 }; 45 46 47 bool CQueue::GetQueueLenth(int& a) 48 { 49 a = iNodeCount; 50 51 return true; 52 } 53 bool CQueue::GetQueueTop(int& a) 54 { 55 a = m_pTop->a; 56 57 return true; 58 } 59 60 61 62 bool CQueue::IsEmpty() 63 { 64 if(iNodeCount == 0) 65 { 66 return true; 67 } 68 69 return false; 70 71 } 72 void CQueue::InitQueue() 73 { 74 if(!IsEmpty()) 75 { 76 DestroyQueue(); 77 } 78 79 m_pTop = m_pBase = NULL; 80 iNodeCount = 0; 81 } 82 83 bool CQueue::InQueue(int a) 84 { 85 pNode pNodeTemp = new Node; 86 87 if(pNodeTemp != NULL) 88 { 89 pNodeTemp->a = a; 90 pNodeTemp->pNext = NULL; 91 92 if(m_pTop == NULL) 93 { 94 m_pTop = m_pBase = pNodeTemp; 95 } 96 else 97 { 98 m_pBase->pNext = pNodeTemp; 99 100 m_pBase = pNodeTemp; 101 } 102 103 iNodeCount++; 104 105 return true; 106 } 107 return false; 108 109 } 110 111 112 bool CQueue::OutQueue(int& a) 113 { 114 if(m_pTop == NULL) 115 { 116 return false; 117 } 118 else 119 { 120 pNode pNodeTemp = m_pTop; 121 122 m_pTop =m_pTop->pNext; 123 124 a = pNodeTemp->a; 125 126 delete pNodeTemp; 127 128 iNodeCount--; 129 130 if(iNodeCount == 0) 131 { 132 m_pBase = NULL; 133 } 134 135 return true; 136 } 137 } 138 void CQueue::DestroyQueue() 139 { 140 pNode pNodeDel = m_pTop; 141 142 while(pNodeDel != NULL) 143 { 144 145 m_pTop = m_pTop->pNext; 146 147 delete pNodeDel; 148 149 pNodeDel = m_pTop; 150 151 iNodeCount--; 152 } 153 154 m_pTop = m_pBase = NULL; 155 iNodeCount = 0; 156 } 157 158 159 160 161 int main() 162 { 163 164 165 CQueue One; 166 167 One.InitQueue(); 168 169 int i = 0; 170 int iTemp = 0; 171 int iLenth = 0; 172 int iTop = 0; 173 int a[10] = {13,25,33,15,658,3,97,60,26,16}; 174 175 printf("基本隊列操做:\n\n"); 176 if(One.IsEmpty()) 177 { 178 printf("目前隊列中爲空\n"); 179 } 180 181 printf("\n進隊:\n"); 182 for(i=0;i<10;i++) 183 { 184 One.InQueue(a[i]); 185 printf("%d ",a[i]); 186 } 187 188 if(!One.IsEmpty()) 189 { 190 printf("\n\n目前隊列中有數據\n"); 191 } 192 printf("\n\n"); 193 194 195 One.GetQueueLenth(iLenth); 196 printf("隊列長度: %d\n\n",iLenth); 197 198 One.GetQueueTop(iTop); 199 printf("隊列的頭: %d\n\n",iTop); 200 201 printf("出隊:\n"); 202 203 for(i=0;i<10;i++) 204 { 205 One.OutQueue(iTemp); 206 printf("%d ",iTemp); 207 } 208 printf("\n"); 209 210 if(One.IsEmpty()) 211 { 212 printf("\n目前隊列中爲空\n"); 213 } 214 215 216 217 218 return 0; 219 }