国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu)教程實(shí)驗(yàn)一順序表基本操作的實(shí)現(xiàn)

這篇具有很好參考價值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu)教程實(shí)驗(yàn)一順序表基本操作的實(shí)現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

實(shí)驗(yàn)一 ?順序表基本操作的實(shí)現(xiàn)

一、實(shí)驗(yàn)?zāi)康?/h3>

1.掌握線性表的順序存貯結(jié)構(gòu)及基本操作,深入了解順序表的基本特性,以便在實(shí)際問題背景下靈活運(yùn)用它們。

2.深入理解和靈活掌握順序表的插入、刪除等操作。

二、實(shí)驗(yàn)環(huán)境

1.硬件:每個學(xué)生需配備計(jì)算機(jī)一臺。

2.軟件:Windows操作系統(tǒng)+Visual C++。

三、實(shí)驗(yàn)要求

????1.將建表、遍歷、插入、刪除分別定義為4個子函數(shù),通過主函數(shù)實(shí)現(xiàn)對上述子函數(shù)的調(diào)用。

2.輸入數(shù)據(jù):數(shù)據(jù)類型設(shè)定為整型

四、實(shí)驗(yàn)內(nèi)容

實(shí)現(xiàn)順序表各種基本運(yùn)算的基礎(chǔ)上,設(shè)計(jì)主程序,完成如下功能:

(1)初始化順序表L。

(2)依次插入2,5,7,9,10共5個元素。

(3)輸出順序表L。

(4)輸出順序表L的長度。

(5)判斷順序表L是否為空。

(6)輸出順序表L第4個元素。

(7)輸出元素5的位置。

(8)在第4個元素的位置上插入元素100。

(9)輸出順序表L。

(10)刪除順序表L的第3個元素。

(11)輸出順序表L。

(12)釋放順序表L。

實(shí)現(xiàn)程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定義順序表

typedef struct{

ElemType data[MaxSize]; //存放順序表元素

int length; //存放順序表的長度

}SqList; //聲明順序表的類型

//創(chuàng)建順序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化線性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//銷毀線性表

void DestroyList(SqList *&L){

free(L);

}

//判斷線性表是否為空表

bool ListEmpty(SqList *L){

return(L->length==0);

}

//求線性表的長度

int ListLength(SqList *L){

return(L->length);

}

//輸出順序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

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


}

}

//求線性表的第i個元素

bool GetElem(SqList *L,int i,ElemType &e)

{

if(i<1 || i>L->length)

return false;

e=L->data[i-1];

return true;

}

//查找第一個值為e的元素值

int LocateElem(SqList *L,ElemType e)

{

int i=0;

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

i++;

if(i>=L->length)

return 0;

else

return i+1;

}

//插入第i個元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//刪除第i個元素

bool ListDelete(SqList *&L,int i,ElemType &e)

{

int j;

if(i<1 || i>L->length)

return false;

i--;

e=L->data[i];

for(j=i;j<L->length-1;j++)

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

L->length--;

return true;

}

void main()

{

SqList *L;

ElemType e;

printf("順序表的基本運(yùn)算如下:\n");

printf("(1)初始化順序表L\n");InitList(L);

printf("(2)依次插入2,5,7,9,10\n");

int i,y;

char s;

//循環(huán)輸入,遇到回車停止輸入

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("(3)輸出順序表L");DispList(L);

printf("\n(4)輸出順序表L長度:%d\n",ListLength(L));

printf("(5)順序表L為%s\n",(ListEmpty(L)?"空":"非空"));

GetElem(L,3,e);

printf("(6)順序表L的第3個元素:%d\n",e);

printf("(7)元素5的位置:%d\n",LocateElem(L,5));

printf("(8)在第4個元素位置上插入100");ListInsert(L,4,100);

printf("\n(9)輸出順序列表L:");

DispList(L);

printf("\n(10)刪除L的第3個元素\n");

ListDelete(L,3,e);

printf("(11)輸出順序表L:");

DispList(L);

printf("\n(12)釋放順序表L\n");

DestroyList(L);

}

運(yùn)行結(jié)果:

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一順序表實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)

測試結(jié)果:

通過!

2.順序表的應(yīng)用

(1)設(shè)計(jì)算法,刪除順序表中所有值等于x的元素。

實(shí)現(xiàn)程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定義順序表

typedef struct{

ElemType data[MaxSize]; //存放順序表元素

int length; //存放順序表的長度

}SqList; //聲明順序表的類型

//創(chuàng)建順序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化線性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//銷毀線性表

void DestroyList(SqList *&L){

free(L);

}

//輸出順序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

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

}

}

//插入第i個元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//順序表的刪除

bool Delete(SqList *&L,int a)

{

   int k=0;

for(int i=0;i<L->length ;i++)

{

if(L->data[i]==a)//當(dāng)前元素為a時k增1

{

k++;

}

else

{

L->data [i-k]=L->data [i];//當(dāng)前元素不a時將其前移k個位置

}

}

L->length -= k;//順序表L的長度減K

    return true;

}

void main()

{

SqList *L;

InitList(L);

printf("請輸入順序表用空格分開按回車結(jié)束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("輸出順序表L");DispList(L);

    printf("\n請輸入刪除元素:\n");

    int a;

    scanf("%d",&a);

    Delete(L,a);

printf("輸出順序表L\n");

   DispList(L);

}

運(yùn)行結(jié)果:

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一順序表實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)

測試結(jié)果:

通過!

(2)設(shè)計(jì)算法,將順序表L中所有奇數(shù)移動到偶數(shù)的前面。

實(shí)現(xiàn)程序:

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定義順序表

typedef struct{

ElemType data[MaxSize]; //存放順序表元素

int length; //存放順序表的長度

}SqList; //聲明順序表的類型

//創(chuàng)建順序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化線性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//銷毀線性表

void DestroyList(SqList *&L){

free(L);

}

//插入第i個元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//輸出順序表

void DispList(SqList *L)

{

    int i,b;

int a=0;

int j=L->length-1;

    while(a<j){

while((j>=0)&&(L->data[j]%2==0))

j--;

while((a<j)&&(L->data[a]%2==1))

a++;

if(a<j){

b=L->data[j];

L->data[j]=L->data[a];

L->data[a]=b;

}

}

for(i=0;i<L->length;i++){

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

}

}

void main()

{

SqList *L;

InitList(L);

printf("請輸入順序表用空格分開按回車結(jié)束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("輸出順序表L");

DispList(L);

printf("\n");

DestroyList(L);

}

運(yùn)行結(jié)果:

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一順序表實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)

測試結(jié)果:

通過!

五、思考題

1.刪除順序表中自第i個元素起連續(xù)k個元素。

程序?qū)崿F(xiàn):

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定義順序表

typedef struct{

ElemType data[MaxSize]; //存放順序表元素

int length; //存放順序表的長度

}SqList; //聲明順序表的類型

//創(chuàng)建順序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化線性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//銷毀線性表

void DestroyList(SqList *&L){

free(L);

}

//判斷線性表是否為空表

bool ListEmpty(SqList *L){

return(L->length==0);

}

//求線性表的長度

int ListLength(SqList *L){

return(L->length);

}

//輸出順序表

void DispList(SqList *L)

{

for(int i=0;i<L->length;i++)

{

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


}

}

//插入第i個元素

bool ListInsert(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//順序表的刪除

bool Delete(SqList *&L,int a)

{

    if(L->length==0)    //線性表為空

    return 0;

    if(a<L->length)

    {

        for(int i=a;i<L->length;i++)

        {

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

        }

        L->length--;

    }


    return 1;

}

void main()

{

SqList *L;

InitList(L);

printf("請輸入順序表用空格分開按回車結(jié)束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInsert(L,i,y);

}

printf("輸出順序表L");DispList(L);

    printf("\n請輸入刪除的位置和刪除的元素個數(shù):\n");

    int a,b;

    scanf("%d%d",&a,&b);

    if(b>=L->length)

    {

        printf("輸入有誤\n");

       

    }

    else

    {

        while(b--)

        {

            Delete(L,a);

       }

    }

printf("輸出順序表L\n");

    DispList(L);

DestroyList(L);

}

運(yùn)行結(jié)果:

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一順序表實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)

測試結(jié)果:

通過!

2.已知順序表遞減有序,將元素x插入,保持其有序性

程序?qū)崿F(xiàn):

#include<stdio.h>

#include<malloc.h>

#define MaxSize 50

typedef int ElemType;

//定義順序表

typedef struct{

ElemType data[MaxSize]; //存放順序表元素

int length; //存放順序表的長度

}SqList; //聲明順序表的類型

//創(chuàng)建順序表

void CreateList(SqList *&L,ElemType a[],int n)

{

int i=0,k=0;

L=(SqList *)malloc(sizeof(SqList));

while(i<n)

{

L->data[k]=a[i];

k++;

i++;

}

L->length=k;

}

//初始化線性表

void InitList(SqList *&L){

L=(SqList *)malloc(sizeof(SqList));

L->length=0;

}

//銷毀線性表

void DestroyList(SqList *&L){

free(L);

}

//輸出順序表

void DispList(SqList *L)

{

int n;

int l;

n=L->length;

//冒泡排序法從小到大排序

for(int i=0;i<n-1;i++)

{

for(int j=0;j<n-1-i;j++){

if(L->data[j]<L->data[j+1]){

l=L->data[j];

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

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

}

}


}

for(i=0;i<L->length;i++){

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

}

}

//插入元素

bool ListInserts(SqList *&L,int i,ElemType e)

{

int j;

if(i<1 || i>L->length+1 || L->length==MaxSize)

return false;

i--;

for(j=L->length;j>i;j--)

L->data[j]=L->data[j-i];

L->data[i]=e;

L->length++;

return true;

}

//插入新增元素到最后

bool ListInsert(SqList *&L,ElemType e)

{

int i;

i=L->length+1;

ListInserts(L,i,e);

return true;


}

void main()

{

SqList *L;

InitList(L);

printf("請輸入順序表用空格分開按回車結(jié)束\n");

int i,y;

char s;

for(i=1;i<51&&s!='\n';i++){

scanf("%d",&y);

s=getchar();

ListInserts(L,i,y);

}

printf("輸出順序表L");DispList(L);

printf("\n輸入要插入的元素");

int f;

scanf("%d",&f);

ListInsert(L,f);

printf("再次輸出順序表");

DispList(L);

printf("\n");

DestroyList(L);

}

運(yùn)行結(jié)果:

數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)一順序表實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報告,數(shù)據(jù)結(jié)構(gòu)

測試結(jié)果:

通過!

六、實(shí)驗(yàn)總結(jié)

通過本次增加了對C語言的掌握,對順序表的建表、初始化、輸出等操作有了進(jìn)一步的認(rèn)識,同時對C語言主函數(shù)和子函數(shù)的調(diào)用進(jìn)一步的認(rèn)識。領(lǐng)會順序表存儲結(jié)構(gòu)和掌握順序表中各種基本運(yùn)算算法的設(shè)計(jì)。對C語言循環(huán)結(jié)構(gòu)、冒泡排序法等方法進(jìn)行了復(fù)習(xí)。在實(shí)驗(yàn)過程中會出現(xiàn)很多問題,出現(xiàn)程序報錯的情況。在測試階段發(fā)現(xiàn)出現(xiàn)的錯誤基本為小錯誤,如參數(shù)錯誤,調(diào)用錯誤,返回值錯誤等。一個程序最可怕的是無報錯錯誤,在程序不報錯的情況下運(yùn)行結(jié)果和實(shí)驗(yàn)結(jié)果不同,經(jīng)過調(diào)試后最終和實(shí)驗(yàn)結(jié)果相同。文章來源地址http://www.zghlxwxcb.cn/news/detail-724358.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)教程實(shí)驗(yàn)一順序表基本操作的實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包