在實驗課上,要求操作線性表的基本操作及其應用,這是第一次實驗,用到得是順序表結構。
課程名:資料結構
實驗目的:(1)掌握線性表的定義;
(2)掌握線性表的基本操作,如建立、查詢、插入和刪除等。
實驗要求:定義乙個包含學生資訊(學號,姓名,成績)的順序表,使其具有如下功能:
(1)根據指定學生個數,逐個輸入學生資訊;
(2)逐個顯示學生表中所有學生的相關資訊;
(3)根據姓名查詢,返回此學生的學號和成績;
(4)根據指定的位置可返回相應的學生資訊(學號,成績,姓名);
(5)給定乙個學生資訊,插入到表中指定的位置;
(6)刪除指定位置的學生記錄;
(7)統計表中學生個數。
實驗題目:線性表的基本操作及其應用
實驗過程:按照實驗要求編寫相應程式**,並除錯執行。
附:順序表的主函式**。
首先初始化順序表,也就是構造乙個空的順序表。
【演算法描述】
status initlist
(sqlist &l)
//構造空的順序表l
取值:根據指定的位置序號i,獲取順序表中第i個資料元素的值。這個獲取,可以通過陣列下標定位得到,elem[i-1]單元儲存第i個資料元素。
【演算法描述】
status getelem
(sqlist l,
int i,elemtype &e)
查詢:根據指定的元素值e,查詢順序表中第1個與i相等的元素。若查詢成功,則返回該元素在表中的位置序號;若失敗,返回0。
【演算法描述】
int
locateelem
(sqlist l,elemtype e)
插入:在表的第i個位置插入乙個新的資料元素e,使長度為n的線性表變為長度為n+1的線性表。
【演算法描述】
status listinsert
(sqlist &l,
int i,elemtype e)
刪除:將表中的第i個元素刪去,將長度為n的線性表變成長度為n-1的線性表。
【演算法描述】
status listdelete
(sqlist &l,
int i)
以上就是將要用到的順序線性表的一些基本操作及其相關演算法。下面我們就對這次實驗的要求所寫的程式進行編寫:
有了上面的基本操作,剩下的就是主函式部分,當然,你也可以對這些基本操作進行適當的修改,不過在寫主函式之前,還得對這個表進行輸入東西,輸入的是什麼呢?肯定就是實驗要求的東西啦,本次實驗輸入的就是一些學生資訊(姓名,學號,成績)。
【演算法描述】
void
input
(elemtype *e)
//輸入
當然,有輸入就要有輸出,不然輸入的東西有什麼意義呢?不過,在程式中,就算沒有輸入,也至少有乙個輸出,即只要是程式,就會要輸出。輸出的演算法如下:
【演算法描述】
void
output
(elemtype &e)
//輸出
現在就只剩主函式部分了,那就直接上完整的**:
【完整**】
#include
#include
#include
#include
#define ok 1
#define error 0
#define overflow -2
#define maxsize 100
typedef
int status;
// 定義函式返回值型別
typedef
struct
student;
typedef student elemtype;
typedef
struct
sqlist;
status initlist
(sqlist *l)
// 構造空的順序表 l
elemtype getelem
(sqlist &l,
int i)
// 訪問順序表,找到 i位置,返回給 e
intsearch
(sqlist &l,
char str)
// 根據名字查詢,返回該同學在順序表中的編號
return0;
}
status listinsert
(sqlist &l,
int i,elemtype e)
// 在 i位置插入某個學生的資訊
l.elem[i]
=e;//將新元素e放入第i個位置
++l.length;
return ok;
}
status listdelete
(sqlist &l,
int i)
// 在順序表中刪除 i位置的學生資訊
--l.length;
//長度減一
return ok;
}void
input
(elemtype *e)
//輸入
void
output
(elemtype &e)
//輸出
intmain()
l.length=x;
break
;case3:
for(
int i=
1;i<=x;i++
)break
;case4:
char s[20]
;printf
("請輸入要查詢的學生姓名:");
scanf
("%s"
,s);if(
search
(l,s)
)output
(l.elem[
search
(l,s)])
;else
printf
("對不起,查無此人\n");
printf(""
);break
;case5:
printf
("請輸入要查詢的位置:");
int id1;
scanf
("%d"
,&id1)
; b=
getelem
(l,id1)
;output
(b);
break
;case
6:
printf (
"請輸入要插入的位置:");
int id2;
scanf
("%d"
,&id2)
;printf
("請輸入學生資訊:\n");
input
(&c);if
(listinsert
(l,id2,c)
)else
break
;case7:
printf
("請輸入要刪除的位置:");
int id3;
scanf
("%d"
,&id3);if
(listdelete
(l,id3)
)else
break
;case8:
printf
("已錄入的學生個數為:%d\n\n"
,l.length)
;break;}
}printf
("\n\n請按任意鍵退出\n\n");
return0;
}
**就是這樣,如果有什麼錯誤的地方,懇請大牛們指出糾正,非常感謝! 建立線性表
include include include include list.h 函式名 createlist 函式功能 建立線性表 引數 無 list createlist void return plist 函式名 destroylist 函式功能 銷毀線性表 函式返回值 無。void destro...
Problem E 建立鍊錶 線性表
time limit 1 sec memory limit 128 mb submit 323 solved 207 線性表 設鍵盤輸入n個英語單詞,輸入格式為n,w1,w2,wn,其中n表示隨後輸入英語單詞個數,試編一程式,建立乙個單向鍊錶,實現 如果單詞重複出現,則只在鍊錶上保留乙個。4 now...
線性表綜合例項之學生資訊管理系統
前面兩次分別講了線性表的兩種結構,接下來要來運用到實際生活當中。接下來的例子用的是鍊錶,因為順序結構的線性表比較好理解,可在看過此文章自行實現,而且絕大多數都是使用鍊錶來組織結構。所以就用鍊錶來講解。首先我們要先想好乙個學生應有的資訊 姓名 年齡 性別 學號 出生日期等一些基本資訊。然後建立乙個學生...