99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋(píng)果6袋
6
麥子學(xué)院

C語(yǔ)言順序表的簡(jiǎn)單實(shí)現(xiàn)

發(fā)布時(shí)間:2016-11-06 21:23  回復(fù):0  查看:2367   最后回復(fù):2016-11-06 21:23  

C語(yǔ)言順序表里的難點(diǎn)有向順序表里插入元素,刪除元素,查詢?cè)匚恢眠@幾個(gè)函數(shù)比較難寫(xiě),我自己根據(jù)這幾個(gè)難點(diǎn)做了幾個(gè)圖片來(lái)解釋這幾個(gè)功能的具體實(shí)現(xiàn):

 

插入元素的實(shí)現(xiàn):

 

  其實(shí)數(shù)據(jù)結(jié)構(gòu)與算法中的順序表的原理跟數(shù)組是一樣的。當(dāng)你在往一個(gè)數(shù)組中插入一個(gè)元素時(shí),為了避免插入的位置的原有數(shù)據(jù)被覆蓋我們就需要發(fā)數(shù)組中從插入位置開(kāi)始的數(shù)據(jù)統(tǒng)一往后移一個(gè)位置,然后再把需要插入的數(shù)據(jù)插入此時(shí)的表中,這樣就可以保證數(shù)據(jù)不會(huì)丟失,并且每插入一個(gè)數(shù)據(jù)我們的表的長(zhǎng)度就加1。

 

//插入元素   

int InsertList(sqlink L,int data,int no){  

    int j;  

    if(L->last >= maxsize-1){  

        printf("沒(méi)有空閑空間!\\n");  

        return 0;  

    }else if(no<0||no>L->last+1){  

        printf("插入位置不存在!\\n");  

        return 0;  

    }else{  

        for(j=L->last;j>=no-1;j--)  

            L->data[j+1] = L->data[j];  

        L->data[no-1] = data;  

        L->last++;  

        return 0;  

    }  

}  

C語(yǔ)言順序表的簡(jiǎn)單實(shí)現(xiàn)

刪除元素的實(shí)現(xiàn):

 

  相對(duì)于插入元素,刪除元素不需要進(jìn)行數(shù)據(jù)的插入,我們想要?jiǎng)h除某一個(gè)位置的數(shù)據(jù)只需要把此位置的數(shù)據(jù)覆蓋了就行了,也就是說(shuō)把需要?jiǎng)h除的位置的后繼元素都往前移一個(gè)位置,把需要?jiǎng)h除的位置的數(shù)據(jù)覆蓋的。

 

//插入元素   

int InsertList(sqlink L,int data,int no){  

    int j;  

    if(L->last >= maxsize-1){  

        printf("沒(méi)有空閑空間!\\n");  

        return 0;  

    }else if(no<0||no>L->last+1){  

        printf("插入位置不存在!\\n");  

        return 0;  

    }else{  

        for(j=L->last;j>=no-1;j--)  

            L->data[j+1] = L->data[j];  

        L->data[no-1] = data;  

        L->last++;  

        return 0;  

    }  

}

C語(yǔ)言順序表的簡(jiǎn)單實(shí)現(xiàn)

定位元素的實(shí)現(xiàn):

 

  定位元素的思想很簡(jiǎn)單,跟數(shù)組的遍歷時(shí)一樣的。當(dāng)我們想要定位某一個(gè)數(shù)據(jù)在表中的位置時(shí),只需要從順序表的第一位置開(kāi)始依次查找,直到查找到時(shí)返回其在表的位置,如果遍歷了所有的元素也沒(méi)有找到需要的數(shù)據(jù)便返回空。

 

//定位元素  

int LocateList(sqlink L,int data){  

    int i = 0;  

    while(i<=L->last&&L->data[i]!=data)  

        i++;  

    if(i<L->last) return i;  

    else return 0;  

}

C語(yǔ)言順序表的簡(jiǎn)單實(shí)現(xiàn)

 

所有代碼的實(shí)現(xiàn):

 

#include<stdio.h>  

#include<malloc.h>  

#define maxsize  1024  //線性表的最大長(zhǎng)度  

typedef struct{        //表的類型   

    int data[maxsize];//表的儲(chǔ)存空間   

    int last;  

}sqlist,*sqlink;      //說(shuō)明標(biāo)示符   

  

  

void CreateList(sqlink L);//創(chuàng)空表  

void ClearList(sqlink L);//置空表  

int GetList(sqlink L,int no);//取表元素   

int LengthList(sqlink L);//求表長(zhǎng)  

int InsertList(sqlink L,int data,int no);//插入元素  

int DeleteList(sqlink L,int no);//刪除元素  

int LocateList(sqlink L,int data);//定位元素  

int EmptyList(sqlink L);//判空表  

void PrintList(sqlink L);//打印表元素   

   

int main(){  

      

    sqlink L = (sqlink)malloc(sizeof(sqlist));  

    CreateList(L);  

    PrintList(L);  

      

    int data,x;  

    printf("請(qǐng)輸入要插入的數(shù)據(jù)和位置:");  

    scanf("%d %d",&data,&x);  

    InsertList(L,data,x);  

    PrintList(L);  

      

    return 0;  

}   

  

void CreateList(sqlink L){  

    int tempNo = 1;  

    int tempData = 0;  

    do{  

        printf("請(qǐng)輸入順序表第%d個(gè)元素:",tempNo);  

        scanf("%d",&tempData);  

        if(tempData!=-1){  

            L->data[tempNo-1] = tempData;  

            L->last = tempNo-1;  

            tempNo++;  

        }  

    }while(tempNo<=maxsize&&tempData!=-1);  

}  

void PrintList(sqlink L){  

    int i;  

    for(i = 0;i<LengthList(L);i++){  

        printf("%d ",L->data[i]);  

    }  

    printf("\\n");  

}   

void ClearList(sqlink L){  

    L->last = -1;  

}  

int GetList(sqlink L,int no){  

    int tempData = 0;  

    tempData = L->data[no-1];  

    return tempData;   

}  

int LengthList(sqlink L){  

    int tempL;  

    tempL = L->last+1;  

    return tempL;  

}  

//插入元素   

int InsertList(sqlink L,int data,int no){  

    int j;  

    if(L->last >= maxsize-1){  

        printf("沒(méi)有空閑空間!\\n");  

        return 0;  

    }else if(no<0||no>L->last+1){  

        printf("插入位置不存在!\\n");  

        return 0;  

    }else{  

        for(j=L->last;j>=no-1;j--)  

            L->data[j+1] = L->data[j];  

        L->data[no-1] = data;  

        L->last++;  

        return 0;  

    }  

}  

//刪除元素  

int DeleteList(sqlink L,int no){  

    int j;  

    if(no<0||no>L->last){  

        printf("刪除的元素不存在");  

        return 0;  

    }else{  

        for(j=no;j+1<=L->last;j++)  

            L->data[j] = L->data[j+1];  

        L->last--;  

        return 0;  

    }  

}  

//定位元素  

int LocateList(sqlink L,int data){  

    int i = 0;  

    while(i<=L->last&&L->data[i]!=data)  

        i++;  

    if(i<L->last) return i;  

    else return 0;  

}

 

 

文章來(lái)源:博客園

您還未登錄,請(qǐng)先登錄

熱門(mén)帖子

最新帖子

?