最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言之實現單鏈表指定結點的插入方式

 更新時間:2022年07月13日 10:26:25   作者:nefu_lmy  
這篇文章主要介紹了C語言之實現單鏈表指定結點的插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

單鏈表指定結點的插入

#include <bits/stdc++.h>
using namespace std;
 
typedef struct node
{
    int data;
    struct node *next;
}no;
 
int main()
{
    no *head,*tail,*p,*q;
    head=new no;
    head->next=NULL;
    tail=head;
    int n;
    printf("一共要輸入的數:");
    cin>>n;
    int k;
    cin>>k;
    for(int i=0;i<n;i++)
    {
        p=new no;
        p->data=k;
        p->next=NULL;
        tail->next=p;//因為tail=head,所以tail沒有數值,tail->next才有數值
        tail=p;
        cin>>k;
    }
    printf("輸入要插入的數:");
    int m;
    cin>>m;
    q=new no;//生成一個結點來存放這個數
    q->data=m;
    q->next=NULL;
    printf("要插在哪個數和哪個數之間:");
    int a,b;
    cin>>a>>b;
    p=head;
    while(p->data!=m&&p->next!=NULL)
    {
       p=p->next;
       if(p->data==a&&p->next->data==b)
       {
           q->next=p->next;//先處理后面的結點,保證后面的鏈表不斷開,
           //q->next可以起到鏈接后面鏈表的作用
           p->next=q;
       }
    }
    p=head->next;
    for(int j=0;j<n+1;j++)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    return 0;
}

測試一:

一共要輸入的數:5
1 2 3 4 5 0
輸入要插入的數:7
要插在哪個數和哪個數之間:1 2
1 7 2 3 4 5 

測試二:

一共要輸入的數:5
1 1 2 3 4 0
輸入要插入的數:2
要插在哪個數和哪個數之間:1 1
1 2 1 2 3 4

鏈表之在指定結點前面或后面插入新的結點

1.我們知道鏈表無非就是增刪改查這幾個操作,而在指定結點前方或后方插入結點就是增加的一種體現。

(1)在指定結點后方插入新結點

例子:1->2->3->4->5

當要在3和4之間插入新結點的時候(即在3的后方插入新結點)

步驟:

  • 1.先找到3(point->data == data)
  • 2.將3->next(即4的地址)賦給new->next,將新結點new與結點4建立了聯系

即:new->next = 3->next;

  • 3.完成上面兩步驟后,再執(zhí)行3->next = new;這樣就完成了在3的后面插入了新的結點

切記步驟2和3不可調換。

直接上代碼:

int inserFrontLinklist(struct Test* head,struct Test* new,int data1)
{
?? ?struct Test* point = head;
?? ?while(point != NULL)
?? ?{
?? ??? ?if(point->data == data1)
?? ??? ?{
?? ??? ??? ?//后插法的做法
?? ??? ??? ?new->next = point->next;
?? ??? ??? ?point->next = new;
?? ??? ??? ?return 1;
?? ??? ?}
?? ??? ?point = point->next;
?? ?}?? ?
?? ?return 0;
}

(2)在指定結點前方插入新結點

例子:1->2->3->4->5

在指定結點前方插入新結點要考慮兩種情況,一種是特殊情況,看是否插入的位置是在鏈表頭,另一種情況是正常插入,插入的地方不是鏈表頭,那么我們一起來看看你兩種情況怎么辦。

1.如果要插入的點剛好是在鏈表頭的話

?? ?struct Test* point = head;
?? ?if(point->data == data)
?? ?{
?? ??? ?new->next = head;
?? ??? ?return new;
?? ?}//如果要找的那個數剛好在頭結點的話那么直接插進去即可

以上兩個操作就完成了在鏈表頭插入新的結點的操作,但是記得return的是new,而不是head,因為現在的head已經發(fā)生了改變。

2.如果不是在鏈表頭,即正常插入

while(point->next != NULL)//這里跟后插法的區(qū)別,后插法是直接判斷point本身,而這里是判斷point->next
?? ?{
?? ??? ?if(point->next->data == data)//這里也一樣,后插法是判斷point->data,而這里是判斷point->next->data;
?? ??? ?{
?? ??? ??? ?new->next = point->next;//這里的算法跟后插法一樣
?? ??? ??? ?point->next = new;
?? ??? ??? ?
?? ??? ??? ?printf("Congratulations,you find the data success!\n");
?? ??? ??? ?return head;
?? ??? ?}
?? ??? ?point = point->next;
?? ?}

雖然這里的核心代碼跟上面的后插法是一樣的,但是兩者的判斷條件不一樣,后插法的判斷條件是while(point != NULL),而前插法的判斷條件是while(point->next != NULL),一定要切記這兩點

直接上代碼:

struct Test* insertBehindLinklist(struct Test *head,struct Test* new,int data)
{//前插法的做法
?? ?struct Test* point = head;
?? ?if(point->data == data)
?? ?{
?? ??? ?new->next = head;
?? ??? ?return new;
?? ?}//如果要找的那個數剛好在頭結點的話那么直接插進去即可。
?? ?
?? ?while(point->next != NULL)//這里跟后插法的區(qū)別,后插法是直接判斷point本身,而這里是判斷point->next
?? ?{
?? ??? ?if(point->next->data == data)//這里也一樣,后插法是判斷point->data,而這里是判斷point->next->data;
?? ??? ?{
?? ??? ??? ?new->next = point->next;//這里的算法跟后插法一樣
?? ??? ??? ?point->next = new;
?? ??? ??? ?
?? ??? ??? ?printf("Congratulations,you find the data success!\n");
?? ??? ??? ?return head;
?? ??? ?}
?? ??? ?point = point->next;
?? ?}
?? ?printf("Sorry, you find error!\n");
?? ?
?? ?return head;
}

切記一點:

如果鏈表頭發(fā)生了改變的話,一定要返回新的鏈表頭,如果鏈表頭沒發(fā)生變化的話,不用返回鏈表頭,在main里也能檢測到鏈表結點的變化(因為指針本身就是一個地址)

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • MFC程序中使用QT開發(fā)界面的實現步驟

    MFC程序中使用QT開發(fā)界面的實現步驟

    本文主要介紹了MFC程序中使用QT開發(fā)界面的實現步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C++ 實現雙向鏈表的實例

    C++ 實現雙向鏈表的實例

    這篇文章主要介紹了C++ 實現雙向鏈表的實例的相關資料,需要的朋友可以參考下
    2017-07-07
  • 用C語言求冪函數和指數函數的方法

    用C語言求冪函數和指數函數的方法

    這篇文章主要介紹了用C語言求冪函數和指數函數的方法,即pow()函數和sqrt()函數的使用,需要的朋友可以參考下
    2015-08-08
  • Qt生成隨機數的方法

    Qt生成隨機數的方法

    本文主要介紹了Qt生成隨機數,生成隨機數主要用到了函數qsrand和qrand,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • VS2013安裝配置和使用Boost庫教程

    VS2013安裝配置和使用Boost庫教程

    這篇文章主要為大家詳細介紹了VS2013安裝配置和使用Boost庫的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • C++事件處理中的__hook與__unhook用法詳解

    C++事件處理中的__hook與__unhook用法詳解

    這篇文章主要介紹了C++事件處理中__hook與__unhook的用法,C++中的COM類主要支持事件處理,需要的朋友可以參考下
    2016-01-01
  • C++實現將簡單密碼譯回原文的方法

    C++實現將簡單密碼譯回原文的方法

    這篇文章主要介紹了C++實現將簡單密碼譯回原文的方法,可實現將簡單的字母位移類型的密碼譯回原文的功能,涉及C++簡單字符串操作相關技巧,需要的朋友可以參考下
    2016-05-05
  • C++ 讀文件 將文件內容讀入到字符串string中的方法

    C++ 讀文件 將文件內容讀入到字符串string中的方法

    今天小編就為大家分享一篇C++ 讀文件 將文件內容讀入到字符串string中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • EasyC++自動存儲持續(xù)性

    EasyC++自動存儲持續(xù)性

    這篇文章主要介紹了EasyC++自動存儲持續(xù)性,下面文章圍繞EasyC++自動存儲持續(xù)性的相關資料展開全文資料,需要的小伙伴可以參考一下下面文章的具體內容,希望對你的學習有所幫助
    2021-12-12
  • Qt編寫地圖之實現覆蓋物坐標和搜索

    Qt編寫地圖之實現覆蓋物坐標和搜索

    地圖應用中經常會需要有覆蓋物坐標和搜索的功能,本文將利用Qt實現這一功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2022-03-03

最新評論

翼城县| 克什克腾旗| 兰溪市| 永新县| 时尚| 上栗县| 利津县| 南康市| 名山县| 青冈县| 黔江区| 汝南县| 衡东县| 湖口县| 长泰县| 西青区| 凯里市| 咸宁市| 儋州市| 八宿县| 化州市| 泽库县| 潮州市| 建始县| 十堰市| 积石山| 尉犁县| 新宁县| 永康市| 萨迦县| 虎林市| 酉阳| 林州市| 上饶县| 镇康县| 如东县| 天等县| 明溪县| 剑阁县| 凤台县| 太康县|