實驗二 線性表的基本操作

2021-08-21 04:21:52 字數 3010 閱讀 4365

一.實驗目的

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 求字尾表示式 由兩類物件構成 運算數和運算符號 不同運算符號優先順序不一樣 結論 需要有種儲存方法,能順序的儲存運算數,並在需要的時候 倒序 輸出,此時堆疊就起作用了。堆疊的抽象資料型...