數(shù)據(jù)結(jié)構(gòu)重學(xué)日記(八)單鏈表的增刪改查

準備工作

還是和順序表的操作一樣,先創(chuàng)建一個 link_list.c文件官扣,內(nèi)容如下:


//
// Created by wu on 19-1-13.
//
#include <stdbool.h>
#include <stdio.h>

typedef int ElemType;

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList; // 結(jié)構(gòu)體 結(jié)構(gòu)體指針幅狮, LNode * 也是結(jié)構(gòu)體指針

/**
 * 單鏈表頭插法
 * @param L
 * @return
 */
LinkList head_insert(LinkList LL) {
    int x;
    LinkList s;
    LL = (LinkList) malloc(sizeof(LNode)); // 創(chuàng)建頭結(jié)點,分配頭結(jié)點大小的內(nèi)存
    LL->next = NULL;
    scanf("%d", &x);
    while (x != 999) {
        s = (LinkList) malloc(sizeof(LNode));
        s->data = x;
        s->next = LL->next;
        LL->next = s;
        scanf("%d", &x);
    }
    return LL;
}


/**
 * 尾插
 * @param LL
 */
void last_insert(LinkList LL) {
    int x;
    LinkList s, *r = LL;
    LL = (LinkList) malloc(sizeof(LNode));
    scanf("%d", &x);
    while (x != 999) {
        s = (LinkList) malloc(sizeof(LNode));
        s->data = x;
        r->next = s;
        r = s;
        scanf("%d", &x);
    }
    r->next = NULL; // 為了保證安全正確,尾結(jié)點指針置空

}

/**
 * 按值插入
 * @param LL
 * @param e
 * @return
 */
LinkList search_elem_by_value(LinkList LL, ElemType e) {
    LinkList p = LL->next;

    while (p != NULL && p->data != e) {
        p = p->next;
    }
    return p;
}


LinkList search_elem_by_num(LinkList LL, int i){
    int j = 1;
    LinkList p = LL->next;
    if(i == 0 ) return LL; // 頭結(jié)點
    if(i< 1) return NULL; // i 無效

    while(p && j < i){
        p = p->next;
        j++;
    }

    if(j == i) return p;
    else return NULL;


}

/**
 * 按位插入
 * @param L
 * @param i
 * @param x
 * @return
 */
void insert_elem(LinkList LL, int i, ElemType x) {

    LinkList p = search_elem_by_num(LL, i - 1);
    LinkList s = (LinkList) malloc(sizeof(LNode));
    s->next = p->next;
    s->data = x;
    p->next = s;
}

bool delete_elem(LinkList LL, int i) {
    LinkList p = search_elem_by_num(LL, i - 1);
    LinkList q;
    q = p->next;
    p->next = q->next;
    free(q);
    return true;
}

void print_link_list(LinkList LL) {
    LinkList s = LL->next;
    while (s) {
        printf("%3d", s->data);
        s = s->next;
    }
    printf("\r\n\r\n");
}

main.c


#include <stdio.h>
#include <malloc.h>
//#include "list.c"
#include "link_list.c"

int main() {

    LinkList LL;
    LL = head_insert(LL);

//    LNode LL;
//    head_insert(&LL);

    print_link_list(LL);

    insert_elem(LL, 2, 90);

    print_link_list(LL);

    delete_elem(LL,2);

    print_link_list(LL);

    printf("Hello, World!\n");
    return 0;
}

執(zhí)行結(jié)果

輸入:2 3 4 5 999

輸出:
5 4 3 2
5 90 4 3 2
5 4 3 2
Hello, World!

值得一提的是蹄皱,結(jié)構(gòu)體:


typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList; // 結(jié)構(gòu)體 結(jié)構(gòu)體指針篙螟, LNode * 也是結(jié)構(gòu)體指針

LNode 是結(jié)構(gòu)體名菌湃,*LinkList 是結(jié)構(gòu)體指針,所以下邊的調(diào)用使用 LinkList 時遍略,不需要在調(diào)用中寫 &惧所,方法實現(xiàn)也不需要寫 * , 但是在頭插法調(diào)用后就需要返回 LL ,否則拿不到值绪杏。

main 方法中注釋的兩行代碼等價于上邊的兩行下愈,而且不需要頭插法返回LL,這里提醒一下蕾久,以免看到的時候造成疑惑势似。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市僧著,隨后出現(xiàn)的幾起案子履因,更是在濱河造成了極大的恐慌,老刑警劉巖盹愚,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栅迄,死亡現(xiàn)場離奇詭異,居然都是意外死亡杯拐,警方通過查閱死者的電腦和手機霞篡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門世蔗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朗兵,你說我怎么就攤上這事污淋。” “怎么了余掖?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵寸爆,是天一觀的道長。 經(jīng)常有香客問我盐欺,道長赁豆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任冗美,我火速辦了婚禮魔种,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粉洼。我一直安慰自己节预,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布属韧。 她就那樣靜靜地躺著安拟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宵喂。 梳的紋絲不亂的頭發(fā)上否淤,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天荐吵,我揣著相機與錄音题翰,去河邊找鬼荆烈。 笑死,一個胖子當著我的面吹牛裸燎,可吹牛的內(nèi)容都是我干的奔滑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼顺少,長吁一口氣:“原來是場噩夢啊……” “哼朋其!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脆炎,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤梅猿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后秒裕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱蚓,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年几蜻,在試婚紗的時候發(fā)現(xiàn)自己被綠了喇潘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体斩。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颖低,靈堂內(nèi)的尸體忽然破棺而出絮吵,到底是詐尸還是另有隱情,我是刑警寧澤忱屑,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布蹬敲,位于F島的核電站,受9級特大地震影響莺戒,放射性物質(zhì)發(fā)生泄漏伴嗡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一从铲、第九天 我趴在偏房一處隱蔽的房頂上張望瘪校。 院中可真熱鬧,春花似錦名段、人聲如沸渣淤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗅定,卻和暖如春自娩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背渠退。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工忙迁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碎乃。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓姊扔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梅誓。 傳聞我的和親對象是個殘疾皇子恰梢,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 目錄 1、屬性 2梗掰、鏈表和數(shù)組的區(qū)別 2.1嵌言、數(shù)組概述 2.2、數(shù)組和鏈表優(yōu)缺點 2.3及穗、鏈表和數(shù)組的比較 3摧茴、單...
    我哈啊哈啊哈閱讀 2,809評論 1 41
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對這種結(jié)構(gòu)定義相應(yīng)的運算埂陆,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,854評論 0 13
  • 本文來自本人著作《趣學(xué)數(shù)據(jù)結(jié)構(gòu)》 鏈表是線性表的鏈式存儲方式苛白,邏輯上相鄰的數(shù)據(jù)在計算機內(nèi)的存儲位置不一定相鄰娃豹,那么...
    rainchxy閱讀 3,729評論 6 20
  • 鏈表是線性表的鏈式存儲方式,邏輯上相鄰的數(shù)據(jù)在計算機內(nèi)的存儲位置不一定相鄰购裙,那么怎么表示邏輯上的相鄰關(guān)系呢懂版? 可以...
    rainchxy閱讀 1,974評論 0 6
  • 甘德禮(做人做事禾锤,第一位是什么私股?)持續(xù)原創(chuàng)分享第148天 今天去扶貧,剛回到家恩掷,很累倡鲸。看到一篇文章黄娘,摘抄如下峭状,和大...
    華南帝虎閱讀 3,382評論 5 5