資料結構(C語言版)實驗一 線性表

2021-10-09 14:34:50 字數 4690 閱讀 7709

**實驗要求:實驗目的:

1、掌握線性表的定義;

2、掌握線性表的基本操作,如建立、查詢、插入和刪除等。

實驗內容:

定義乙個包含學生資訊(學號,姓名,成績)的的順序表和煉表,使其具有如下功能:

(1) 根據指定學生個數,逐個輸入學生資訊;

(2) 逐個顯示學生表中所有學生的相關資訊;

(3) 根據姓名進行查詢,返回此學生的學號和成績;

(4) 根據指定的位置可返回相應的學生資訊(學號,姓名,成績);

(5) 給定乙個學生資訊,插入到表中指定的位置;

(6) 刪除指定位置的學生記錄;

(7) 統計表中學生個數。

順序表的定義

typedef struct sqlist;

鍊錶的定義:

typedef struct lnodelnode,*linklist;

實驗要求:

(1) 程式要新增適當的注釋,程式的書寫要採用縮排格式。

(2) 程式要具在一定的健壯性,即當輸入資料非法時,程式也能適當地做出反應,如插入刪除時指定的位置不對等等。

(3) 程式要做到介面友好,在程式執行時使用者可以根據相應的提示資訊進行操作。

(4) 根據實驗報告模板詳細書寫實驗報告,在實驗報告中給出鍊錶根據姓名進行查詢的演算法和插入演算法的流程圖。

順序表**

#include

#include

#include

#define maxsize 100

//順序表的最大空間

typedef

struct

student;

typedef

struct

sqlist;

intcreat

(sqlist *l)

//順序表的初始化

student getelem

(sqlist *l,

int i)

//取i位置元素值

intsearch

(sqlist *l)

//查詢學生函式

return t;

}int

insert

(sqlist *l,

int i,student e)

//插入函式

l->elem[i]

=e;++l->length;

return1;

}int

delete

(sqlist *l,

int i)

//刪除函式

--l->length;

return1;

}void

input

(student *e)

//輸入函式

void

output

(student *e)

//輸出函式

intmain()

l.length=x;

puts(""

);break

;case3:

for(i=

1;i<=x;i++

)break

;case4:

d=search

(&l);if

(d>0)

output

(&l.elem[

search

(&l)])

;else

puts

("對不起,查無此人\n");

printf(""

);break

;case5:

printf

("請輸入要查詢的位置:");

scanf

("%d"

,&id1)

; b=

getelem

(&l,id1)

;output

(&b)

;break

;case6:

printf (

"請輸入要插入的位置:");

scanf

("%d"

,&id2)

;printf

("請輸入學生資訊:\n");

input

(&c);if

(insert

(&l,id2,c)

)else

break

;case7:

printf

("請輸入要刪除的位置:");

scanf

("%d"

,&id3);if

(delete

(&l,id3)

)else

break

;case8:

printf

("已錄入的學生個數為:%d\n\n"

,l.length)

;break;}

}}

鍊錶**

#include

#include

#include

typedef

struct

student;

typedef

struct lnodelnode,

*linklist;

intinilist

(linklist l)

intgetelem

(linklist l,

int i,student *e)if(

!p||j>i)

return0;

//判斷i是否合法

*e=p->data;

//取第i個結點資料域

return1;

}int

search

(linklist l,

char str[

],student *e)

p=p->next;

//指向下一結點

}return0;

}int

listinsert

(linklist l,

int i,student e)if(

!p||j>i-1)

return0;

s=(struct lnode*

)malloc

(sizeof

(lnode));

//生成新結點

s->data=e;

//結點*s的資料域置為e

s->next=p->next;

//結點*s的指標域指向結點ai

p->next=s;

//結點*p的指標域指向結點*s

return1;

}int

listdelete

(linklist p,

int i)if(

!(p->next)

||(j>i-1)

)return0;

//判斷刪除位置是否合理

linklist q;

//生成新結點

q=p->next;

//儲存被刪結點的位址以便於釋放

p->next=q->next;

//改變刪除結點前驅結點的指標域

free

(q);

//釋放刪除結點空間

return1;

}void

input

(student *e)

void

output

(student *e)

intmain()

break

;case3:

for(i=

1;i<=x;i++

)break

;case4:

printf

("請輸入要查詢的學生姓名:");

scanf

("%s"

,s);if(

search

(&l,s,

&f))

output

(&f)

;else

printf

("對不起,查無此人\n");

puts(""

);break

;case5:

printf

("請輸入要查詢的位置:");

scanf

("%d"

,&id1)

;getelem

(&l,id1,

&c);

output

(&c)

;break

;case6:

printf (

"請輸入要插入的位置:");

scanf

("%d"

,&id2)

;printf

("請輸入學生資訊:\n");

input

(&d);if

(listinsert

(&l,id2,d)

)else

break

;case7:

printf

("請輸入要刪除的位置:");

scanf

("%d"

,&id3);if

(listdelete

(&l,id3)

)else

break

;case8:

printf

("已錄入的學生個數為:%d\n\n"

,x);

break;}

}return0;

}

資料結構(C語言版) 線性表

1 線性結構的特點 1 存在唯一乙個被稱作 第乙個 的資料元素。2 存在唯一乙個被稱作 最後乙個 的資料元素。3 除第乙個元素之外,每個資料元素均只有乙個前驅。4 除最後乙個元素之外,每個資料元素均只有乙個後繼。2 線性表 n個資料元素的有限序列,是一種邏輯結構。1 同一線性表中的元素具有相同的性質...

C 資料結構實驗一線性表

實驗內容 1.建立乙個順序表,隨機產生 10 個 100 以內的整數,並按要求完成 1 編寫顯示函式,在螢幕上顯示順序表中的 10 個整數 2 編寫查詢函式,從鍵盤輸入任一整數在順序表中查詢,若找到,返回該元素在順序表中的位置,否則提示無此元素 3 編寫插入函式,從鍵盤輸入待插入元素及插入位置,將完...

資料結構(C語言版) 線性表(順序表)

二 線性表的順序儲存 三 配套實驗 線性表是具有相同資料型別的n n 0 個資料元素的有限序列。1 簡單的線性表。例如,26個英文本母表 一周七天。2 複雜的線性表。例如,學生資訊登記表。在複雜的線性表,常把資料元素稱為記錄 record 它由若干個資料項 item 組成,而含有大量記錄的線性表又稱...