免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
1、鏈表的基本操作( 無頭結(jié)點)

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

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

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

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

  

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

  1 //鏈表的基本操作(無表頭)  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; //動態(tài)創(chuàng)建一個節(jié)點時,在初始狀態(tài)下,令next域為空 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("鏈表為空\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)鍵點: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) //鏈表校驗 77 { 78 printf("鏈表為空\n"); 79 exit(0); 80 } 81 82 r = (LinkList)malloc(sizeof(LNode)); //創(chuàng)建節(jié)點校驗 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)) //合法插入點,指針移動 94 { 95 p = p->next; 96 i++; 97 } 98 99 if (1 == nInsertPoint) //插入點為1100 {101 r->next = p;102 L = r;103 }104 else 105 {106 while ((NULL == p) || (i > nInsertPoint - 1)) //判斷非法插入點。前者判斷是否越界,后者判斷是否 <=0;107 {108 printf("非法插入點,請檢查參數(shù)\n");109 exit(0);110 }111 112 //合法插入點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("鏈表為空,無法刪除\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 else143 {144 while ((NULL == p) || (i > nDeletePoint - 1))145 {146 printf("非法刪除點, 請檢查參數(shù)\n");147 exit(0);148 }149 150 //合法刪除點151 r = p->next;152 p->next = r->next;153 }154 155 free(r); //釋放刪除節(jié)點156 }157 158 //銷毀159 void DestroyLinkList(LinkList &L)160 {161 LinkList p = NULL, r = NULL;162 163 if (NULL == L)164 {165 printf("鏈表為空\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("鏈表為空\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 else203 {204 while ((NULL == p) || (i > nFindPoint - 1))205 {206 printf("非法查找點\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("鏈表為空\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 else238 {239 while ((NULL == p) || (i > nModifyPoint - 1))240 {241 printf("非法修改點\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 /*測試插入257 printf("插入前鏈表:\n");258 PrintLinkList(La);259 260 InsertLinkList(La, -1, 4);261 262 printf("插入后鏈表:\n");263 PrintLinkList(La);264 //*/265 266 /*測試刪除267 printf("刪除前鏈表:\n");268 PrintLinkList(La);269 270 DeleteLinkList(La, 2);271 272 printf("刪除后鏈表:\n");273 PrintLinkList(La);274 //*/275 276 /*測試查找277 PrintLinkList(La);278 int x = FindLinkList(La, 2);279 printf("%d\n", x);280 //*/281 282 /*測試修改283 PrintLinkList(La);284 ModifyLinkList(La, -1, 4);285 PrintLinkList(La);286 //*/287 288 DestroyLinkList(La); //銷毀鏈表289 290 return 0;291 }

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用C語言實現(xiàn)單鏈表的各種操作
線性表--單鏈表(c實現(xiàn))
單鏈表的逆序(反轉(zhuǎn))
數(shù)據(jù)結(jié)構(gòu)題集(C語言版)算法設(shè)計題解析-第二章
第十二課 實驗二 循環(huán)鏈表實驗
單鏈表操作(書本)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服