鏈表

花了半天終于把鏈表弄清楚了,一個字——爽!

新建鏈表

#include <stdio.h>
#include <stdlib.h>
//這里創(chuàng)建一個結(jié)構(gòu)體用來表示鏈表的結(jié)點類型
struct node
{
    int data;
    struct node *next;
};
int main()
{
    struct node *head, *p, *q, *t;
    int i, n, a;
    scanf("%d", &n);
    head = NULL;//頭指針初始為空
    for (i = 1; i <= n; i++)//循環(huán)讀入n個數(shù)
    {
        scanf("%d", &a);
        //動態(tài)申請一個空間摔踱,用來存放一個結(jié)點,并用臨時指針p指向這個結(jié)點
        p = (struct node *)malloc(sizeof(struct node));
        p->data = a;//將數(shù)據(jù)存儲到當前結(jié)點的data域中
        p->next = NULL;//設(shè)置當前結(jié)點的后繼指針指向空考婴,也就是當前結(jié)點的下一個結(jié)點為空
        if (head == NULL)
            head = p;//如果這是第一個創(chuàng)建的結(jié)點,則將頭指針指向這個結(jié)點
        else
            q->next = p;//如果不是第一個創(chuàng)建的結(jié)點赤嚼,則將上一個結(jié)點的后繼指針指向當前結(jié)點
        q = p;//指針q也指向當前結(jié)點
    }
    //輸出鏈表中的所有數(shù)
    t = head;
    while (t != NULL)
    {
        printf("%d ", t->data);
        t = t->next;//繼續(xù)下一個結(jié)點
    }
    getchar(); getchar();
    return 0;
}

完整代碼(增刪)

#include <stdio.h>
#include <iostream>
using namespace std;
struct student
{
    int num;
    float score;
    struct student *next;
};

int n = 0;  //全局變量,用于記錄鏈表結(jié)點數(shù)

int main()
{
    student *create();
    student *insert(student *head, student *stu);
    student *del(student *head, int num);
    void print(student *head);                      //函數(shù)提前聲明

    student *head, stu;             //*head為新建的鏈表顺又,stu為新增的數(shù)據(jù)
    int  del_num;
    head = create();                //新建鏈表
    print(head);
    cout << "Input the deleted number : \n";
    cin >> del_num;
    head = del(head, del_num);      //刪除數(shù)據(jù)
    print(head);
    cout << "Input the inserted record : \n";
    cin >> stu.num >> stu.score;
    head = insert(head, &stu);      //添加數(shù)據(jù)
    print(head);                    //打印數(shù)據(jù)
    return 0;
}

student *create() {
    student *head, *p1, *p2;
    head = NULL;        //頭指針初始為空

    p1 = p2 = new student;            //用new在內(nèi)存中開辟一個結(jié)構(gòu)體變量的空間更卒,將地址賦給p1,p2
    cin >> p1->num >> p1->score;      //將數(shù)據(jù)賦給剛開辟的變量空間
    while (p1->num != 0) {
        n = n + 1;
        if (head == NULL)
            head = p1;       //如果這是第一個創(chuàng)建的結(jié)點,則將頭指針指向這個結(jié)點
        else {
            p2->next = p1;  //如果不是第一個創(chuàng)建的結(jié)點稚照,則將上一個結(jié)點的后繼指針指向當前結(jié)點
            p2 = p1;        //指針p2也指向當前結(jié)點蹂空,因為等會兒p1又要指向新創(chuàng)建的數(shù)據(jù)
            p1 = new student;
            cin >> p1->num >> p1->score;
        }
    }
    p2->next = NULL;
    return (head);
}

void print(student *head) {
    student *p;
    p = head;
    while (p != NULL)
    {
        cout << p->num << '\t' << p->score << '\n';
        p = p->next;
    }
}

student *insert(student *head,student *stu) {
    student  *p0, *p1, *p2;
    p1 = head;    p0 = stu;     //p0指向要插入的結(jié)點
    if (head == NULL) {
        head = p0;  
        p0->next = NULL;    //鏈表為空
    }
    else {
        while ((p0->num > p1->num) && (p1->next != NULL)) {     //未找到結(jié)點,循環(huán)
            p2 = p1;  
            p1 = p1->next;
        }
        if (p0->num <= p1->num) {   //找到結(jié)點
            if (head == p1)  
                head = p0;  //插入在第一個結(jié)點前
            else              
                p2->next = p0;
            p0->next = p1;
        }
        else { 
            p1->next = p0;  
            p0->next = NULL;    //插入在最后一個后
        }
    }
    n = n + 1;          
    return (head);
}

student *del(student *head,int num) {
    struct  student  *p1, *p2;
    if (head == NULL) {
        cout << "list null\n";  
        return  NULL;           //鏈表為空
    }
    p1 = head;
    while (num != p1->num && p1->next != NULL) {    //判斷p1所指向的結(jié)點是否是要刪除的結(jié)點
        p2 = p1;  p1 = p1->next;    //未找到結(jié)點果录,循環(huán)上枕。繼續(xù)判斷下一個結(jié)點是否是要刪除的結(jié)點
    }
    if (num == p1->num) {   //p1當前指向的結(jié)點就是要刪除的結(jié)點 
        if (num == head->num)   
            head = p1->next;    //結(jié)點為第一個
        else  
            p2->next = p1->next;    //找到結(jié)點。將p2的指針成員指向p1所指的下一個結(jié)點
        n = n - 1;
    }
    else  cout << "Not  found\n";   //循環(huán)結(jié)束弱恒,沒有要找的結(jié)點
    return  head;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辨萍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子返弹,更是在濱河造成了極大的恐慌锈玉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件义起,死亡現(xiàn)場離奇詭異拉背,居然都是意外死亡,警方通過查閱死者的電腦和手機默终,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門椅棺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人齐蔽,你說我怎么就攤上這事两疚。” “怎么了肴熏?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵鬼雀,是天一觀的道長。 經(jīng)常有香客問我蛙吏,道長源哩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任鸦做,我火速辦了婚禮励烦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泼诱。我一直安慰自己坛掠,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著屉栓,像睡著了一般舷蒲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上友多,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天牲平,我揣著相機與錄音,去河邊找鬼域滥。 笑死纵柿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的启绰。 我是一名探鬼主播昂儒,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼委可!你這毒婦竟也來了渊跋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤撤缴,失蹤者是張志新(化名)和其女友劉穎刹枉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屈呕,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡微宝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了虎眨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟋软。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嗽桩,靈堂內(nèi)的尸體忽然破棺而出岳守,到底是詐尸還是另有隱情,我是刑警寧澤碌冶,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布湿痢,位于F島的核電站,受9級特大地震影響扑庞,放射性物質(zhì)發(fā)生泄漏譬重。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一罐氨、第九天 我趴在偏房一處隱蔽的房頂上張望臀规。 院中可真熱鬧,春花似錦栅隐、人聲如沸塔嬉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谨究。三九已至恩袱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間记盒,已是汗流浹背憎蛤。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留纪吮,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓萎胰,卻偏偏與公主長得像碾盟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子技竟,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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