日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

1、鏈表的基本操作( 無(wú)頭結(jié)點(diǎn))

 計(jì)科圖書 2014-09-21

    這幾天在寢室專門寫鏈表,其實(shí)鏈表的操作和線性表相比有區(qū)別。

  1、數(shù)據(jù)結(jié)構(gòu):

  采用的結(jié)構(gòu)體:數(shù)據(jù)域和指針域。

  2、在插入,刪除和銷毀時(shí),主要都是指針的指向發(fā)生變化,所以在寫代碼時(shí)務(wù)必校驗(yàn),指針是否為空,否則容易造成程序的崩潰。。。

  

    具體代碼如下:若有問題,希望大家及時(shí)指正,共同探討。。。

復(fù)制代碼
  1 //鏈表的基本操作(無(wú)表頭)
  2  
3
4
5 #include <stdio.h> 6 #include <stdlib.h> 7 8 typedef int ElemType; 9 10 typedef struct node 11 { 12 ElemType data; 13 struct node *next; 14 }LNode, *LinkList; 15 16 17 //尾插法創(chuàng)建鏈表 18 LinkList CreateLinkList(int nNodeCount) 19 { 20 LinkList head = NULL, p = NULL, r = NULL; 21 int i; 22 23 for (i = 0; i < nNodeCount; i++) 24 { 25 p = (LinkList)malloc(sizeof(LNode)); 26 if (NULL == p) 27 { 28 printf("分配內(nèi)存失敗\n"); 29 free(p); 30 exit(0); 31 } 32 33 printf("為p->data賦值:"); 34 scanf("%d", &p->data); 35 p->next = NULL; //動(dòng)態(tài)創(chuàng)建一個(gè)節(jié)點(diǎn)時(shí),在初始狀態(tài)下,令next域?yàn)榭?/span> 36 37 if (NULL == head) 38 { 39 head = p; 40 } 41 else 42 { 43 r->next = p; 44 } 45 r = p; 46 } 47 48 return head; 49 } 50 51 //輸出鏈表 52 void PrintLinkList(LinkList L) 53 { 54 LinkList p = NULL; 55 if (NULL == L) 56 { 57 printf("鏈表為空\(chéng)n"); 58 exit(0); 59 } 60 61 p = L; 62 while (NULL != p) 63 { 64 printf("%d\t", p->data); 65 p = p->next; 66 } 67 printf("\n"); 68 } 69 70 //插入 (關(guān)鍵點(diǎn):0, 1, 2) 71 void InsertLinkList(LinkList &L, int nInsertPoint, ElemType nInsertValue) 72 { 73 LinkList p = NULL, r = NULL; 74 int i = 1; 75 76 if (NULL == L) //鏈表校驗(yàn) 77 { 78 printf("鏈表為空\(chéng)n"); 79 exit(0); 80 } 81 82 r = (LinkList)malloc(sizeof(LNode)); //創(chuàng)建節(jié)點(diǎn)校驗(yàn) 83 if (NULL == r) 84 { 85 printf("內(nèi)存分配失敗\n"); 86 free(r); 87 exit(0); 88 } 89 r->data = nInsertValue; 90 r->next = NULL; 91 92 p = L; 93 while ((NULL != p) && (i < nInsertPoint - 1)) //合法插入點(diǎn),指針移動(dòng) 94 { 95 p = p->next; 96 i++; 97 } 98 99 if (1 == nInsertPoint) //插入點(diǎn)為1 100 { 101 r->next = p; 102 L = r; 103 } 104 else 105 { 106 while ((NULL == p) || (i > nInsertPoint - 1)) //判斷非法插入點(diǎn)。前者判斷是否越界,后者判斷是否 <=0; 107 { 108 printf("非法插入點(diǎn),請(qǐng)檢查參數(shù)\n"); 109 exit(0); 110 } 111 112 //合法插入點(diǎn) 113 r->next = p->next; 114 p->next = r; 115 } 116 } 117 118 //刪除 119 void DeleteLinkList(LinkList &L, int nDeletePoint) 120 { 121 LinkList p = NULL, r = NULL; 122 int i = 1; 123 124 if (NULL == L) 125 { 126 printf("鏈表為空,無(wú)法刪除\n"); 127 exit(0); 128 } 129 130 p = L; 131 while ((NULL != p) && (i < nDeletePoint - 1)) 132 { 133 p = p->next; 134 i++; 135 } 136 137 if (1 == nDeletePoint) 138 { 139 L = p->next; 140 r = p; 141 } 142 else 143 { 144 while ((NULL == p) || (i > nDeletePoint - 1)) 145 { 146 printf("非法刪除點(diǎn), 請(qǐng)檢查參數(shù)\n"); 147 exit(0); 148 } 149 150 //合法刪除點(diǎn) 151 r = p->next; 152 p->next = r->next; 153 } 154 155 free(r); //釋放刪除節(jié)點(diǎn) 156 } 157 158 //銷毀 159 void DestroyLinkList(LinkList &L) 160 { 161 LinkList p = NULL, r = NULL; 162 163 if (NULL == L) 164 { 165 printf("鏈表為空\(chéng)n"); 166 exit(0); 167 } 168 169 p = L; 170 while (NULL != p) 171 { 172 r = p; 173 p = p->next; 174 free(r); 175 } 176 printf("成功銷毀\n"); 177 } 178 179 //查找元素 180 ElemType FindLinkList(LinkList L, int nFindPoint) 181 { 182 LinkList p = NULL; 183 int i = 1; 184 185 if (NULL == L) 186 { 187 printf("鏈表為空\(chéng)n"); 188 exit(0); 189 } 190 191 p = L; 192 while ((NULL != L) && (i < nFindPoint - 1)) 193 { 194 p = p->next; 195 i++; 196 } 197 198 if (1 == nFindPoint) 199 { 200 return p->data; 201 } 202 else 203 { 204 while ((NULL == p) || (i > nFindPoint - 1)) 205 { 206 printf("非法查找點(diǎn)\n"); 207 exit(0); 208 } 209 210 return p->next->data; 211 } 212 } 213 214 //修改元素 215 void ModifyLinkList(LinkList &L, int nModifyPoint, ElemType nModifyValue) 216 { 217 LinkList p = NULL; 218 int i = 1; 219 220 if (NULL == L) 221 { 222 printf("鏈表為空\(chéng)n"); 223 exit(0); 224 } 225 226 p = L; 227 while ((NULL != L) && (i < nModifyPoint - 1)) 228 { 229 p = p->next; 230 i++; 231 } 232 233 if (1 == nModifyPoint) 234 { 235 p->data = nModifyValue; 236 } 237 else 238 { 239 while ((NULL == p) || (i > nModifyPoint - 1)) 240 { 241 printf("非法修改點(diǎn)\n"); 242 exit(0); 243 } 244 245 p->next->data = nModifyValue; 246 } 247 248 } 249 250 int main() 251 { 252 LinkList La = NULL; 253 254 La = CreateLinkList(4); 255 256 /*測(cè)試插入 257 printf("插入前鏈表:\n"); 258 PrintLinkList(La); 259 260 InsertLinkList(La, -1, 4); 261 262 printf("插入后鏈表:\n"); 263 PrintLinkList(La); 264 //*/ 265 266 /*測(cè)試刪除 267 printf("刪除前鏈表:\n"); 268 PrintLinkList(La); 269 270 DeleteLinkList(La, 2); 271 272 printf("刪除后鏈表:\n"); 273 PrintLinkList(La); 274 //*/ 275 276 /*測(cè)試查找 277 PrintLinkList(La); 278 int x = FindLinkList(La, 2); 279 printf("%d\n", x); 280 //*/ 281 282 /*測(cè)試修改 283 PrintLinkList(La); 284 ModifyLinkList(La, -1, 4); 285 PrintLinkList(La); 286 //*/ 287 288 DestroyLinkList(La); //銷毀鏈表 289 290 return 0; 291 }
復(fù)制代碼

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多