C語言之鏈表練習(xí)題-創(chuàng)新互聯(lián)

第3關(guān):單鏈表逆置

本關(guān)需要你設(shè)計一個程序,實現(xiàn)單鏈表的逆置。

成都創(chuàng)新互聯(lián)公司專注于雨花網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供雨花營銷型網(wǎng)站建設(shè),雨花網(wǎng)站制作、雨花網(wǎng)頁設(shè)計、雨花網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造雨花網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供雨花網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

單鏈表的逆置分為兩種方法:頭插法和就地逆置法,這兩種方法雖然都能夠達(dá)到逆置的效果,但還是有著不小的差別。

頭插法

逆置鏈表初始為空,表中節(jié)點從原鏈表中依次“刪除”,再逐個插入逆置鏈表的表頭(即“頭插”到逆置鏈表中),使它成為逆置鏈表的“新”的第一個結(jié)點,如此循環(huán),直至原鏈表為空。

就地逆置法

先假定有一個函數(shù),可以將以head為頭結(jié)點的單鏈表逆序,并返回新的頭結(jié)點。利用這個函數(shù)對問題進(jìn)行求解:將鏈表分為當(dāng)前表頭結(jié)點和其余部分,遞歸的過程就是,先將表頭結(jié)點從鏈表中拆出來,然后對其余部分進(jìn)行逆序,最后將當(dāng)前的表頭結(jié)點鏈接到逆序鏈表的尾部。遞歸的終止條件就是鏈表只剩一個節(jié)點時,直接返回這個節(jié)點。

編程要求

  • 按程序提示輸入并創(chuàng)建一個單鏈表,帶有頭結(jié)點;

  • 可自定義鏈表的長度,可自定義鏈表儲存的數(shù)據(jù)類型,注意更改相應(yīng)的輸入輸出方式;

  • 實現(xiàn)單鏈表的逆置,直觀地輸出結(jié)果。

效果如下: 輸入:

61 212 7 8 0 2

輸出:

鏈表逆置前的數(shù)據(jù):

1 212 7 8 0 2

鏈表逆置后的數(shù)據(jù):

2 0 8 7 212 1

#include#include#includetypedef struct node {
    int data;
    struct node *next;
}NODE,* PNODE;
//函數(shù)聲明
PNODE CreateList();
PNODE ReverseList(PNODE phead);
//CreateList函數(shù)創(chuàng)建鏈表
PNODE CreateList(){//先用尾插法創(chuàng)建一個鏈表
    //創(chuàng)建一個頭節(jié)點
    PNODE phead=(PNODE)malloc(sizeof(NODE));
    phead->next=NULL;

    int len=0,i,val;
    PNODE p=phead;//p指向頭指針phead
    scanf("%d",&len);//輸入的鏈表長度len
    for(i=0;inext = pNew;
        pNew->data = val;

        p=pNew;
    }
    p->next=NULL;
    return phead;
}
//將單鏈表逆置的ReverseList函數(shù)
PNODE ReverseList(PNODE phead){
    PNODE pHEAD=(PNODE)malloc(sizeof(NODE));//新建一個頭節(jié)點pHEAD,然后依次讀入phead中的每一個數(shù)據(jù),并用頭插法創(chuàng)建一個以pHEAD為頭指針的新鏈表
    pHEAD->next=NULL;
    PNODE p = pHEAD->next;
    int val;
    PNODE q=phead->next;//p指向頭指針phead
    while(q!=NULL){
        val = q->data;
        q= q->next;
        PNODE pNew=(PNODE)malloc(sizeof(NODE));//動態(tài)分配一個新節(jié)點pNew
        pHEAD->next = pNew;
        pNew->data = val;
        pNew->next = p;
        p=pNew;
    }
    //p=pHead;
    return pHEAD;

}
void ShowList(PNODE phead){//遍歷鏈表
    PNODE p = phead->next;
    while(p!=NULL){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return;
}
int main(void)
{
    PNODE phead;
    phead = CreateList();
    printf("鏈表逆置前的數(shù)據(jù):\n");
    ShowList(phead);
    
    phead = ReverseList(phead);
    printf("鏈表逆置后的數(shù)據(jù):\n");
    ShowList(phead);
    return 0;
}
第2關(guān):統(tǒng)計單鏈表中的節(jié)點數(shù)

本小節(jié)需要你統(tǒng)計單鏈表中的節(jié)點數(shù)。

相關(guān)知識

根據(jù)上一關(guān)我們知道怎么創(chuàng)建單鏈表了,那么這一關(guān)讓我們鞏固一下單鏈表的知識。

編程要求

請仔細(xì)閱讀右側(cè)代碼,根據(jù)方法內(nèi)的提示,在Begin - End區(qū)域內(nèi)進(jìn)行代碼補充,具體任務(wù)如下:

編寫程序,從鍵盤輸入一串整數(shù)以及整數(shù)的個數(shù),以單鏈表形式存儲起來,計算單鏈表中結(jié)點的個數(shù),輸出單鏈表的數(shù)據(jù)及結(jié)點的個數(shù)。

效果如下:

輸入:

8

12367802

輸出:

12367802

8

#include#include#includetypedef struct node {
    int data;
    struct node *next;
}NODE,*PNODE;

int length_list(PNODE phead){
    int cnt=0;
    PNODE p = phead;
    while(p->next!=NULL){
        cnt++;
        p=p->next;
    }

    return cnt;

}
PNODE CreatList(){
    //創(chuàng)建頭節(jié)點
    PNODE phead = (PNODE)malloc(sizeof(NODE));
    phead->next = NULL;

    int i,len;
    scanf("%d",&len);
    PNODE p = phead;
    for(i=0;idata);
        p->next = pNew;
        pNew->next = NULL;
        p=pNew;
    }
    return phead;
}
void ShowList(PNODE phead){
    PNODE p = phead->next;
    while(p!=NULL){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
    return;
}
int main(void)
{
    PNODE phead;
    phead = CreatList();
    ShowList(phead);
    printf("%d", length_list(phead));
    return 0;
}
第1關(guān):建單向鏈表

本關(guān)需要你建立一個帶頭結(jié)點的單向鏈表。

相關(guān)知識

什么是鏈表?鏈表和二叉樹是C語言數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)和核心。

鏈表有多種形式,它可以是單鏈接的或者雙鏈接的,可以是已排序的或未排序的,可以是循環(huán)的或非循環(huán)的。

編程要求

請仔細(xì)閱讀右側(cè)代碼,根據(jù)方法內(nèi)的提示,在Begin - End區(qū)域內(nèi)進(jìn)行代碼補充,具體任務(wù)如下:

鍵盤輸入一組元素,建立一個帶頭結(jié)點的單向鏈表(無序)。

要求:

  • 輸入整數(shù)的長度以及整數(shù);

  • 輸出無序的單向鏈表。

效果如下:

輸入:

5

1 23 4 8 9

輸出:

1 23 4 8 9

#include#includetypedef struct node {
    int data;
    struct node *next;
}NODE,* PNODE;

PNODE CreateList(){
    //創(chuàng)建一個頭節(jié)點
    PNODE phead=(PNODE)malloc(sizeof(NODE));
    phead->next=NULL;

    int len=0,i,val;
    PNODE p=phead;//p指向頭指針phead
    scanf("%d",&len);//輸入的鏈表長度len
    for(i=0;inext = pNew;
        pNew->data = val;
        pNew->next = NULL;
        p=pNew;
    }
    //p=pHead;
    return phead;
}

void ShowList(PNODE phead){//遍歷鏈表
    PNODE p = phead->next;
    while(p!=NULL){
        printf("%d ",p->data);
        p=p->next;
    }
    return;
}
int main(void)
{
    PNODE phead;
    phead = CreateList();
    ShowList(phead);
    return 0;
}

如果文章對你有用的話,可不可以點一個贊鼓勵我呢^o^

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁名稱:C語言之鏈表練習(xí)題-創(chuàng)新互聯(lián)
轉(zhuǎn)載源于:http://www.muchs.cn/article20/dsoeco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、云服務(wù)器、定制開發(fā)App開發(fā)、品牌網(wǎng)站設(shè)計Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)