欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)

 更新時間:2013年12月13日 14:25:15   作者:  
這篇文章主要介紹了c語言鏈表基本操作,大家參考使用吧

復制代碼 代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(struct Student)
struct Student
{
    long num;
    float score;
    struct Student*next;
};
int n;
int main()
{
    /*-----------------------------程序描述--------------------------------------------
        題目:寫出一個主函數(shù),分別調(diào)用建立鏈表的函數(shù)create(),輸出鏈表的函數(shù)print(),
              刪除鏈表結(jié)點的函數(shù)del(),插入結(jié)點的函數(shù)insert(),一共5個函數(shù)。
        Author:KillerLegend
        Date:  2013.12.6
    ----------------------------------------------------------------------------------*/
//函數(shù)聲明
    struct Student* create();//創(chuàng)建動態(tài)鏈表的函數(shù)聲明,函數(shù)類型為student結(jié)構(gòu)體類型,返回頭指針
    struct Student* del(struct  Student* ,long);//刪除指定位置結(jié)點的函數(shù)聲明,參數(shù):鏈表頭結(jié)點+刪除結(jié)點位置+返回頭指針
    struct Student* insert(struct Student*,struct Student*);//插入一個Student類型數(shù)據(jù)的函數(shù)聲明
    void   print(struct Student*);//輸出鏈表中數(shù)據(jù)的函數(shù)聲明,參數(shù)為鏈表的頭指針
//定義變量
    struct Student *head,*stu;//定義動態(tài)鏈表的頭指針與新的結(jié)點
    long del_num;
//建立鏈表操作
    printf("Input records:\n");
    head = create();//建立鏈表并返回頭指針
    print(head);//輸出全部結(jié)點

//刪除結(jié)點操作
    printf("\nInput the deleted number:");
    scanf("%ld",&del_num);
    while(del_num!=0)//當輸入學號為0時結(jié)束循環(huán)
    {
        head = del(head,del_num);//刪除結(jié)點后返回鏈表的頭地址
        print(head);//輸出全部結(jié)點
        printf("Input the deleted number:");
        scanf("%ld",&del_num);
    }
//插入結(jié)點操作
    printf("\nInput the inserted number:");
    stu=(struct Student*)malloc(LEN);//每插入一個結(jié)點需要開辟一個新的結(jié)點
    scanf("%ld %f",&stu->num,&stu->score);
    while(stu->num!=0)//當輸入的學號為0時結(jié)束循環(huán)
    {
        head = insert(head,stu);//返回鏈表的頭地址
        print(head);
        printf("\nInput the inserted number:");
        stu = (struct Student*)malloc(LEN);
        scanf("%ld %f",&stu->num,&stu->score);
    }
    return 0;
}
//建立鏈表的函數(shù)
struct  Student* create()
{
    struct Student *head;
    struct Student *p1,*p2;
    n=0;
    p1=p2=(struct Student *)malloc(LEN);
    scanf("%ld %f",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0)
    {
        n++;
        if(n==1)head=p1;
        else p2->next=p1;//第一次執(zhí)行時,這一步是將頭指針指向自身,當n從2起,這一步用于使p2指向下一個元素
        p2=p1;//使p2和p1指向同一個存儲區(qū)
        p1=(struct Student*)malloc(LEN);//開辟動態(tài)存儲區(qū),強制返回struct Student類型的指針
        scanf("%ld %f",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return (head);
}

//刪除結(jié)點的函數(shù)
struct Student* del(struct  Student* head,long num)
{
    struct Student *p1,*p2;
    if(head==NULL)
    {
        printf("List null!\n");
        return (head);
    }
    p1=head;
    while(num!=p1->num && p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(num==p1->num)
    {
        if(p1==head)
        {
            head=p1->next;
        }
        else
        {
            p2->next=p1->next;
        }
        printf("Delete:%ld\n",num);
        n=n-1;
    }
    else
    {
        printf("%ld not been found!",num);
    }
    return (head);
}

//插入結(jié)點的函數(shù)
struct   Student* insert(struct Student* head,struct Student * stud)
{
    struct Student *p0,*p1,*p2;
    p1=head;
    p0=stud;
    if(head==NULL)//原來的鏈表是空表
    {
        head=p0;p0->next=NULL;//空表時使插入的結(jié)點作為頭結(jié)點
    }
    else//如果不是空表,則遍歷尋找合適的插入位置
    {
        while((p0->num>p1->num)&&(p1->next!=NULL))//按學號順序插入,如果插入的學號數(shù)字比較大,則應(yīng)該向后推移
        {
            p2=p1;
            p1=p1->next;//后移
        }
    }
    if(p0->num<=p1->num)//找到插入的位置,插入的位置是p1所指向的位置之前,也就是p2指向的位置
    {
        if(head==p1)head=p0;//如果插入的位置是頭位置之前,則使head指向p0
        else p2->next=p0;//如果不是頭位置之前,則使p2的next指針指向插入的數(shù)據(jù)地址即p0
        p0->next=p1;//使p0的next指針指向p1,完成了數(shù)據(jù)的加入
    }
    else//插入的學號位置在最后一個
    {
        p1->next=p0;
        p0->next=NULL;
    }
    n=n+1;//記錄數(shù)加一
    return(head);
}
//輸出鏈表的函數(shù)
void print(struct Student * head)
{
    struct Student * p;
    printf("Now,These %d records are:\n",n);
    p=head;
    if(head!=NULL)
    do
    {
        printf("%ld %5.1f\n",p->num,p->score);
        p=p->next;
    }while(p!=NULL);
}

相關(guān)文章

  • 深入了解C語言中的動態(tài)內(nèi)存分配

    深入了解C語言中的動態(tài)內(nèi)存分配

    這篇文章主要為大家詳細介紹了C語言中的動態(tài)內(nèi)存分配,文中的示例代碼講解詳細,對我們學習C語言有一定的幫助,需要的可以參考一下
    2022-06-06
  • QT生成隨機驗證碼的方法

    QT生成隨機驗證碼的方法

    這篇文章主要為大家詳細介紹了QT生成隨機驗證碼的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法匯總

    VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法匯總

    這篇文章主要介紹了VC運用OPENGL加載BMP紋理圖的實現(xiàn)方法,對于更好的了解OpenGL很有幫助,需要的朋友可以參考下
    2014-07-07
  • Qt實現(xiàn)簡單動態(tài)時鐘

    Qt實現(xiàn)簡單動態(tài)時鐘

    這篇文章主要為大家詳細介紹了Qt實現(xiàn)簡單動態(tài)時鐘,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼

    C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼

    本文介紹了一個在C++中保存不定長二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),在這個結(jié)構(gòu)中,我們使用了一個含有指針和數(shù)組長度的結(jié)構(gòu)體,用這樣的一個結(jié)構(gòu)體構(gòu)造一個結(jié)構(gòu)體數(shù)組,用于存儲每一個不定長的數(shù)組,感興趣的朋友一起看看吧
    2024-03-03
  • C++實現(xiàn)單鏈表按k值重新排序的方法

    C++實現(xiàn)單鏈表按k值重新排序的方法

    這篇文章主要介紹了C++實現(xiàn)單鏈表按k值重新排序的方法,結(jié)合實例形式分析了C++單鏈表中按照給定值進行判斷與排序的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • C語言版掃雷小游戲

    C語言版掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言版的掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C語言單鏈表的實現(xiàn)

    C語言單鏈表的實現(xiàn)

    單鏈表是一種鏈式存取的數(shù)據(jù)結(jié)構(gòu),用一組地址任意的存儲單元存放線性表中的數(shù)據(jù)元素。這篇文章主要介紹了C語言單鏈表的實現(xiàn) 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • C++元編程語言初步入門詳解

    C++元編程語言初步入門詳解

    這篇文章主要為大家介紹了C++元編程語言初步入門的詳解示例,文中包含詳細的基本概念及運用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • C語言 選擇排序算法詳解及實現(xiàn)代碼

    C語言 選擇排序算法詳解及實現(xiàn)代碼

    本文主要介紹C語言 選擇排序算法,這里對排序算法做了詳細說明,并附代碼示例,有需要的小伙伴可以參考下
    2016-08-08

最新評論