一.實驗目的
1、 會定義線性表的順序儲存型別。
2、 熟悉c或c++程式的基本結構,掌握程式中的使用者標頭檔案、實現檔案和主檔案之間的相互關係及各自的作用。
3、 熟悉對線性表的一些基本操作和具體的函式定義。
4、 熟悉turboc或vc操作環境的使用以及多檔案程式的輸入、編輯、除錯和執行的全過程。
二.實驗內容
該程式實現線性表順序儲存結構的插入、刪除等操作。
三.實驗步驟
啟動vc++6.0
輸入程式
(1)line.h
typedef int status; // status是函式的型別
,其值是函式結果狀態**,如ok等
typedef int elemtype;
typedef struct sqlist
elemtype *elem; // 儲存空間基址
int length; // 當前長度
int listsize; // 當前分配的儲存容量(以
sizeof(elemtype)
為單位)
}sqlist;
status initlist(sqlist &l);
int listlength(sqlist l);
status listinsert(sqlist &l,int i,elemtype e);
status listdelete(sqlist &l,int i,elemtype &e);
void listprint(sqlist l);
(2)line.cpp
#include
#include
#include "line.h"
#define list_init_size 10 // 線性表儲存空間的初始分配量
#define listincrement 2 // 線性表儲存空間的分配增量
#define ok 1
#define error 0
#define overflow -2
status initlist(sqlist &l)
{ // 操作結果:構造乙個空的順序線性表
l.elem=(elemtype*)malloc(list_init_size*sizeof(elemtype));
if(!l.elem)
exit(overflow); // 儲存分配失敗
l.length=0; // 空表長度為
0l.listsize=list_init_size; // 初始儲存容量
return ok;
int listlength(sqlist l)
{ // 初始條件:順序線性表
l已存在。操作結果:返回
l中資料元素個數
return l.length;
status listinsert(sqlist &l,int i,elemtype e)
{ // 初始條件:順序線性表
l已存在,1≤
i≤listlength(l)+1
// 操作結果:在l中第
i個位置之前插入新的資料元素e,
l的長度加
1elemtype *newbase,*q,*p;
if(i<1||i>l.length+1)return error;
if(l.length>=l.listsize){
newbase=(elemtype*)realloc(l.elem,(l.listsize+listincrement)*sizeof(elemtype));
if(!newbase)exit(overflow);
l.elem=newbase;
l.listsize+=listincrement;
q=&(l.elem[i-1]);
for(p=&(l.elem[l.length-1]);p>=q;--p) *(p+1)=*p;
*q=e;
++l.length;
return ok;
status listdelete(sqlist &l,int i,elemtype &e)
{ // 初始條件:順序線性表
l已存在,1≤
i≤listlength(l)
// 操作結果:刪除l的第
i個資料元素,並用
e返回其值,
l的長度減
1elemtype *newbase,*q,*p;
if((i<1)||(i>l.length)) return error;
p=&(l.elem[i-1]);
e=*p;
q=l.elem+l.length-1;
for(++p;p<=q;++p) *(p-1)=*p;
--l.length;
return ok;
void listprint(sqlist l)
elemtype *p;
printf("線性表中的元素為:
\n");
for(p=l.elem;pprintf("%d ",*p);
printf("\n");
(3)linemain.cpp
#include
#include"line.h"
void main(){
sqlist l;
int i;
elemtype e;
initlist(l);
printf("請輸入元素:
\n");
for(i=1;i<=6;i++){
scanf("%d",&e);
listinsert(l,i,e);
listprint(l);
printf("請輸入要刪除的位置:
\n");
scanf("%d",&i);
listdelete(l,i,e);
listprint(l);
3、執行程式、查錯
實驗二 線性表實驗
建立乙個n個學生成績的順序表,對錶進行插入 刪除 查詢等操作。分別輸出結果。要求如下 1 用順序表來實現。2 用單鏈表來實現。1 順序表 標頭檔案seqlist建立 ifndef seqlist h define seqlist h const int maxsize 60 class seqlis...
實驗二 線性表的綜合實驗(c )
2 單鏈表 c 實驗目的 鞏固線性表的資料結構的儲存方法和相關操作,學會針對具體應用,使用線性表的相關知識來解決具體問題。實驗內容 建立乙個由 n個學生成績的順序表,n的大小由自己確定,每乙個學生的成績資訊由自己確定,實現資料的對錶進行插入 刪除 查詢等操作。分別輸出結果。includeusing ...
(二)線性結構 堆疊實現線性表的基本操作
堆疊的用途 函式呼叫 遞迴 回溯演算法 表示式求值 例1 計算機如何進行表示式求值?對算術表示式 中綴表示式 例2 求字尾表示式 由兩類物件構成 運算數和運算符號 不同運算符號優先順序不一樣 結論 需要有種儲存方法,能順序的儲存運算數,並在需要的時候 倒序 輸出,此時堆疊就起作用了。堆疊的抽象資料型...