国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

所有類(lèi)型的鏈表問(wèn)題

2019-11-08 18:52:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

創(chuàng)建鏈表的方法:

普通尾插法:STNode* CreateLink(int a[],int n){ int i; STNode* h,*t,*p; h=NULL; for(i=0;i<n;i++) { p=(STNode*)malloc(sizeof(STNode)); p->data=a[i]; p->next=NULL; if(!h) h=t=p; else t=t->next=p; } return h;}普通頭插法STNode* CreateLink(int a[],int n){ STNode* h,*p,*t; h=NULL; while(n>-1) { p=(STNode*)malloc(sizeof(STNode)); p->data=a[--n]; p->next=h; h=p; } return h;}帶頭結(jié)點(diǎn)的尾插法STNode* CreateLink(int a[],int n){ int i; STNode* h,*p,t; h=NULL; for(i=0;i<n;) { p=(STNode*)malloc(sizeof(STNode)); p->next=NULL; if(!h) h=t=p; else { p->data=a[i]; t=t->next=p; ++i; } } return h;}遞歸尾插法STNode* CreateLink(int a[],int n){ STNode *h=NULL; if(n){ h=(STNode*)malloc(sizeof(STNode)); h->data=a[0]; h->next=CreateLink(a+1,n-1); } return h;}單向循環(huán)鏈表STNode* CreateLink(int a[],int n){ int i; STNode *h,*t,*p; h=NULL; for(i=0;i<n;++i) { p=(STNode*)malloc(sizeof(STNode)); p->data=a[i]; if(!h) h=t=p->next=p; else { p->next=h; t=t->next=p; } } return h;}

單鏈表的遍歷

交換頭節(jié)點(diǎn)和尾節(jié)點(diǎn)。void Exchange(STNode *h){ int temp; STNode* p; for(p=h;p->next;p=p->next); if(h-p){ temp=h->data; h->data=p->data; p->data=temp; }}逆向輸出單鏈表每個(gè)節(jié)點(diǎn)的值。//用時(shí)間換空間void PRePrintLink(STNode* h){ STNode *p,*end=NULL; while(end-h) { for(p=h;p->next-end;p=p->next); printf("%5d",p->data); end=p; }}//用空間換時(shí)間void PrePrintLink(STNode* h){ int s[1000],cnt=0; STNode *p; for(p=h;p;p=p->next) s[cnt++]=p->data; for(;cnt>0;--cnt) printf("%5d",s[cnt-1]);}//遞歸void PrePrintLink(STNode* h){ if(h) { PrePrintLink(h->next); printf("%5d",h->data); }}將單鏈表就地逆置。//從前向后拆解鏈表的思想STNode* PreLink(STNode* h){ STNode *s,*p; s=h->next; //初始化操作,s永遠(yuǎn)為頭結(jié)點(diǎn)的下一節(jié)點(diǎn) h->next=NULL;//斷開(kāi)頭結(jié)點(diǎn)的連接 while(s) { p=s; s=s->next; p->next=h; h=p; } return h;}//用頭插法的思想逆置STNode* PreLink(STNode* h){ STNode *p,*hn=NULL; while(h) { p=h; h=h->next; p->next=hn; hn=p; } return hn;}//帶表頭的單鏈表STNode* PreLink(STNode* h){ STNode *p,*q=h->next; while(q->next) { p=q->next; q->next=p->next; p->next=h->next; h->next=p; } return h;}釋放整個(gè)鏈表STNode* ClearLink(STNode* h){ STNode *delp; while(h) { delp=h; h=h->next; free(delp); } return NULL;}鏈表數(shù)值重復(fù)且有序,刪除重復(fù)值節(jié)點(diǎn)。void delete(STNode* h){ STNode *q,*p; q=h; p=h->next; while(p) { if(p->data-q->data) { q=p; p=p->next; } else { q->next=p->next; free(p); p=q->next; } }}鏈表數(shù)值重復(fù)且無(wú)序,刪除重復(fù)值節(jié)點(diǎn)。void delete(STNode* h){ STNode* pkey,*p,*q; pkey=h; while(pkey) { q=pkey; p=q->next; while(p) { if(p->data-q->data) { q=p; p=p->next; } else { q->next=p->next; free(p); p=q->next; } } pkey=pkey->next; ]}鏈表無(wú)重復(fù)節(jié)點(diǎn),將奇數(shù)節(jié)點(diǎn)放在偶數(shù)之前STNode* Move(STNode* h){ STNode *p,*q; q=h; p=q->next;//從第二個(gè)節(jié)點(diǎn)開(kāi)始判斷 while(p) { if(p->data%2) { q->next=p->next; p->next=h; h=p; p=q->next; } else { q=p; p=p->next; } } return h;}將兩個(gè)遞增單鏈表合并成一個(gè)升序鏈表。//合并兩個(gè)有序鏈表STNode* Combine(STNode* h1,STNode* h2){ STNode *ins,*p,*q; //ins為插入的節(jié)點(diǎn) while(h2) //將h2鏈接入h1鏈 { ins=h2; //ins為當(dāng)前h2鏈頭結(jié)點(diǎn) h2=h2->next; //h2后移 for(p=h1;p&&p->data<ins->data;q=p,p=p->next); //找到h1中第一個(gè)不小于h2頭結(jié)點(diǎn)的節(jié)點(diǎn)p ins->next=p; //ins指向p,不再指向h2鏈。此時(shí)h2頭結(jié)點(diǎn)改變 if(p-h1) //若p不為h1鏈頭結(jié)點(diǎn),將q指向ins,即將ins并入h1鏈 q->next=ins; else //若p為h1鏈頭結(jié)點(diǎn),h1為ins,h1鏈頭結(jié)點(diǎn)改變 h1=ins; } return h1; //返回改變后的h1鏈頭結(jié)點(diǎn)}p指向一個(gè)單鏈表的某個(gè)節(jié)點(diǎn)(非頭非尾),刪除該節(jié)點(diǎn)。(未提供頭指針)q=p->next;t=p->data;p->data=q->data;q->data=t;p->next=q->next;free(q);

鏈表的交點(diǎn)問(wèn)題

求兩相交鏈表的節(jié)點(diǎn)。STNode* Process(STNode* h1,STNode* h2){ int l,l1,l2; STNode *p1,*p2; l1=l2=0; for(p1=h1;p1;p1=p1->next,++l1); for(p2=h2;p2;p2=p2->next,++l2); p1=h1; p2=h2; l=l1-l2;//找到兩個(gè)鏈表的長(zhǎng)度差 if(l1<l2){//p1永遠(yuǎn)指向最長(zhǎng)的鏈表 l=-l; p1=h2; p2=h1; } for(;l;p1=p1->next,--l);//補(bǔ)齊兩個(gè)鏈表長(zhǎng)度 for(;p1-p2;p1=p1->next,p2=p2->next); return p1;}判斷鏈表是否有環(huán)。bool Judge(STNode *h){ STNode *slow,*fast; slow=fast=h; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; if(fast==slow) return true; } return false;}找到有環(huán)鏈表的環(huán)入口STNode* Find(STNode *h){ STNode *slow,*fast; slow=fast=h; while(fast&&fast->next) { fast=fast->next->next; slow=slow->next; if(fast==slow) break; } if(fast!=slow) return NULL;//鏈表無(wú)環(huán) fast=h; while(fast-slow)//相遇處即入環(huán)點(diǎn) { fast=fast->next; slow=slow->next; } return fast;//fast和slow相同}
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 始兴县| 神池县| 华亭县| 泰宁县| 东兰县| 利津县| 冷水江市| 同江市| 贵德县| 阳城县| 镶黄旗| 全南县| 湖州市| 婺源县| 政和县| 福州市| 水城县| 巫溪县| 永德县| 乐业县| 贵州省| 吉林市| 日土县| 光泽县| 洪江市| 玛多县| 上虞市| 宿州市| 云南省| 台南县| 交城县| 珲春市| 开封县| 阳谷县| 平昌县| 亳州市| 玉山县| 嘉鱼县| 民乐县| 滦南县| 高清|