日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言输出单链表最大值与最小值,数据结构(C语言版)---顺序表与链表的比较...

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言输出单链表最大值与最小值,数据结构(C语言版)---顺序表与链表的比较... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、存取方式

1)順序表:可以順序存取,也可以隨機存取。

2)鏈表:只能從表頭順序存取。

2、邏輯結構與物理結構

1)順序存儲:邏輯上相鄰,物理位置相鄰。

2)鏈式存儲:邏輯上相鄰,物理位置不一定相鄰。

3、查找、插入、刪除

1)按值查找:當表中數據無序時,順序表和鏈表,時間復雜度為O(n)。

當表中數據有序時,順序表可采用折半查找,時間復雜度為O(log2n)。

2)按序號查找:順序表,時間復雜度為O(1)。

鏈表,時間復雜度為O(n)。

3)插入和刪除:順序表,平均需要移動半個表長的元素

鏈表,只需修改相關結點的指針域。

4、單鏈表中一些簡單題目的解決

1)L為帶頭結點的單鏈表,刪除L中所有值為x的結點

void delx1(Linklist &L, int x)

{

LNode * p = L->next, *pre = L, *q;

while (p!=NULL)

{

if (p->data == x)

{

q = p;

p = p->next;

pre->next = p;

free(q);

}

else

{

pre = p;

p = p->next;

}

}

}

void delx2(Linklist &L, int x)

{

LNode * p = L->next, *r = L, *q;

while (p!=NULL)

{

if (p->data != x)

{

r->next = p;

r = p;

p = p->next;

}

else

{

q = p;

p = p->next;

free(q);

}

}

r->next = NULL;

}

2)用遞歸實現刪除L中所有值為x的結點

void delx3(Linklist &L, int x)

{

LNode * p;

if (L == NULL)

{

return;

}

if (L->data == x)

{

p = L;

L = L->next;

free(p);

delx3(L, x);

}

else

{

delx3(L->next, x);

}

}

3)L為帶頭結點的單鏈表,刪除L中最小值結點

Linklist delmin(Linklist &L)

{

LNode * pre = L, *p = pre->next;

LNode * minpre = pre, *minp = p;

while (p!=NULL)

{

if (p->data < minp->data)

{

minp = p;

minpre = pre;

}

pre = p;

p = p->next;

}

minpre->next = minp->next;

free(minp);

return L;

}

4)L為遞增有序的單鏈表,刪除表中值相同的元素

void delsame(Linklist &L)

{

LNode * p = L->next, *q;

if (p == NULL)

{

return;

}

while (p->next!=NULL)

{

q = p->next;

if (p->data == q->data)

{

p->next = q->next;

free(q);

}

else

{

p = p->next;

}

}

}

5)L為帶頭結點的單鏈表,將L就地逆置

Linklist reverse1(Linklist L)

{

LNode * p, *r;

p = L->next;

L->next = NULL;

while (p!=NULL)

{

r = p->next;

p->next = L->next;

L->next = p;

p = r;

}

return L;

}

Linklist reverse2(Linklist L)

{

LNode * pre, *p = L->next, *r = p->next;

p->next = NULL;

while (r!=NULL)

{

pre = p;

p = r;

r = r->next;

p->next = pre;

}

L->next = p;

return L;

}

6)將單鏈表L結點重排,使遞增有序

void sort(Linklist &L)

{

LNode * p = L->next, *pre;

LNode * r = p->next;

p->next = NULL;

p = r;

while (p!=NULL)

{

r = p->next;

pre = L;

while (pre->next != NULL && pre->next->datadata)

{

pre = pre->next;

}

p->next = pre->next;

pre->next = p;

p = r;

}

}

7)帶頭結點的單鏈表L,頭指針為head,遞增輸出表中數據

void del(Linklist &head)

{

LNode * p, * pre,* q;

while (head->next!=NULL)

{

pre = head;

p = pre->next;

while (p->next!=NULL)

{

if (p->next->data < pre->next->data)

{

pre = p;

}

p = p->next;

}

printf("%d",pre->next->data);

q = pre->next;

pre->next = q->next;

free(q);

}

free(head);

}

8)將表A中的數據按序號的就奇偶性分解到表AB中,對B表的建立采用尾插法

Linklist listcreat1(Linklist &A)

{

Linklist B;

int i = 0;

B = (Linklist)malloc(sizeof(LNode));

B->next = NULL;

LNode * ra = A, * rb = B,* p;

p = A->next;

A->next = NULL;

while (p!= NULL)

{

i++;

if (i % 2 == 0)

{

rb->next = p;

rb = p;

}

else

{

ra->next = p;

ra = p;

}

p = p->next;

}

ra->next = NULL;

rb->next = NULL;

return B;

}

9)將表A中的數據按序號的就奇偶性分解到表AB中,對B表的建立采用頭插法

Linklist listcreat2(Linklist &A)

{

Linklist B = (Linklist)malloc(sizeof(LNode));

B->next = NULL;

LNode * p = A->next, * q;

LNode * ra = A;

while (p!=NULL)

{

ra->next = p;

ra = p;

p = p->next;

q = p->next;

p->next = B->next;

B->next = p;

p = q;

}

ra->next = NULL;

return B;

}

10)把柄兩個遞增有序單鏈表帶頭結點,和并后鏈表遞減排列

void listmerge(Linklist &La, Linklist &Lb)

{

LNode * r, *pa = La->next, *pb = Lb->next;

La->next = NULL;

while (pa&&pb)

{

if (pa->data <= pb->data)

{

r = pa->next;

pa->next = La->next;

La->next = pa;

pa = r;

}

else

{

r = pb->next;

pb->next = La->next;

La->next = pb;

pb = r;

}

}

if (pa)

{

pb = pa;

}

while (pb)

{

r = pb->next;

pb->next = La->next;

La->next = pb;

pb = r;

}

free(Lb);

}

11)將鏈表AB中的公共元素組成鏈表C

void getcom(Linklist A, Linklist B)

{

LNode * p = A->next, *q = B->next, *r, *s;

Linklist C = (Linklist)malloc(sizeof(LNode));

r = C;

while (p!=NULL&&q!=NULL)

{

if (p->data < q->data)

{

p = p->next;

}

else if(p->data>q->data)

{

q = q->next;

}

else

{

s = (LNode *)malloc(sizeof(LNode));

s->data = p->data;

r->next = s;

r = s;

p = p->next;

q = q->next;

}

}

r->next = NULL;

}

12)將兩個鏈表進行集合相等的值只保留一個,將其余結點釋放

Linklist listunion(Linklist &la, Linklist &lb)

{

LNode * pa, * pb,* pc,* pu;

pa = la->next;

pb = lb->next;

pc = la;

while (pa&&pb)

{

if (pa->data == pb->data)

{

pc->next = pa;

pc = pa;

pa = pa->next;

pu = pb;

pb = pb->next;

free(pu);

}

else if (pa->data < pb->data)

{

pu = pa;

pa = pa->next;

free(pu);

}

else

{

pu = pb;

pb = pb->next;

free(pu);

}

}

while (pa)

{

pu = pa;

pa = pa->next;

free(pu);

}

while (pb)

{

pu = pb;

pb = pb->next;

free(pu);

}

pc->next = NULL;

free(lb);

return la;

}

13)單鏈表AB,判斷B是否是A的子序列

int pattern(Linklist A, Linklist B)

{

LNode * p = A, *pre = p, *q = B;

while (p&&q)

{

if (p->data == q->data)

{

p = p->next;

q = q->next;

}

else

{

pre = pre->next;

p = pre;

q = B;

}

}

if (q == NULL)

{

return 1;

}

else

{

return 0;

}

}

5、鏈表的一些簡單問題的實現

1)從兩頭掃描循環雙鏈表,判斷是否對稱

int symmetry(DLinklist L)

{

DNode * p = L->next, *q = L->prior;

while (p!=q&&p->next!=q)

{

if (p->data == q->data)

{

p = p->next;

q = q->prior;

}

else

{

return 0;

}

}

return 1;

}

2)每次刪除循環單鏈表中最小的元素,直到鏈表為空

void delall(Linklist &L)

{

LNode * p, *pre, *minp, *minpre;

while (L->next != L)

{

p = L->next;

pre - L;

minp = p;

minpre = pre;

while (p != L)

{

if (p->data < minp->data)

{

minp = p;

minpre = pre;

}

pre = p;

p = p->next;

}

printf("%d", minp->data);

minpre->next = minp->next;

free(minp);

}

free(L);

}

3)將循環鏈表h2鏈接到循環鏈表h1之后,使之仍保持循環鏈表的形式

Linklist link(Linklist &h1, Linklist &h2)

{

LNode * p, *q;

p = h1;

while (p->next!=h1)

{

p = p->next;

}

q = h2;

while (q->next!=h2)

{

q = q->next;

}

p->next = h2;

q->next = h1;

return h1;

}

標簽:pre,Linklist,NULL,pb,next,鏈表,表與,C語言,data

來源: https://www.cnblogs.com/xqy1874/p/12721261.html

總結

以上是生活随笔為你收集整理的c语言输出单链表最大值与最小值,数据结构(C语言版)---顺序表与链表的比较...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品乱码久久久久 | 亚洲爽爆| 亚洲va国产va天堂va久久 | 国产剧情精品 | 91在线日本 | 中国无码人妻丰满熟妇啪啪软件 | 美女日批视频在线观看 | 日本黄色一级视频 | 久久全国免费视频 | 亚洲av成人无码网天堂 | 尤物视频在线观看 | 狠狠欧美| 自拍偷自拍亚洲精品播放 | 日韩在线一二 | 久久久久亚洲AV成人无在 | 91视频官网| 欧美人日b | 日韩成人黄色片 | 亚洲毛毛片 | 日本黄色www | 亚洲美女屁股眼交8 | 午夜激情福利在线 | 欧美日色 | 欧美精品免费看 | 亚洲一级色 | av中文在线| 免费看黄色小视频 | 欧美色精品 | 国产精品宾馆在线 | 亚洲精品电影 | 国产精品国产三级国产在线观看 | 久久久久久久久久久久久久久久久久久 | 日韩av资源网 | 成人午夜影视在线观看 | 少妇真实被内射视频三四区 | 欧美男同又粗又长又大 | 在线精品自拍 | 丁香啪啪综合成人亚洲 | 91久久一区二区 | 成人性做爰aaa片免费看不忠 | 日韩免费av | 日本xxxx免费 | 久久精品视频91 | 全黄一级播放 | 免费亚洲一区二区 | 日本高清不卡一区 | 97视频在线看 | 日本强好片久久久久久aaa | 97国产在线播放 | 7777在线视频 | 久久久久99| 日韩熟妇一区二区三区 | 国产成人二区 | 人妻在卧室被老板疯狂进入 | 尼姑福利影院 | 欧美成视频 | 人妻一区二区三区视频 | 永久黄网站色视频免费观看w | 极品蜜桃臀肥臀-x88av | 欧美丰满少妇 | 色综合天天综合网天天看片 | 超碰97最新 | 蜜桃视频久久一区免费观看入口 | 欧美日韩久久 | 亚洲欧美综合精品久久成人 | 国产视频在 | 日韩国产三级 | 伊人日韩| 亚洲av无码乱码国产精品 | 久久精品人人爽 | 网站免费在线观看 | 成人黄色网 | 亚洲天堂首页 | 色涩网站 | 久久久久毛片 | 欧美精品入口蜜桃 | 成年女人免费视频 | 久操青青| 成人免费看高清电影在线观看 | 新91av| а√天堂8资源中文在线 | 亚洲av无码片一区二区三区 | 丰满饥渴老女人hd | 激情午夜影院 | 国产高清在线免费观看 | 国产女大学生av | 爱搞国产 | 茄子视频A | 色呦呦网站在线观看 | 日本一区二区三区视频在线 | 亚洲欧美综合视频 | 国产一级免费观看 | 高潮一区| 欧美91看片特黄aaaa | 国产成年无码久久久久毛片 | 91视频国产一区 | 国产毛片一区二区三区va在线 | 2018av| www.伊人.com |