6 2 順序表操作集 20分

2021-10-02 03:46:10 字數 3024 閱讀 3935

後記本題要求實現順序表的操作集。

函式介面定義:

list makeempty();

position find( list l, elementtype x );

bool insert( list l, elementtype x, position p );

bool delete( list l, position p );

其中list結構定義如下:

typedef int position;

typedef struct lnode list;

struct lnode ;

各個操作函式的定義為:

list makeempty():建立並返回乙個空的線性表;

position find( list l, elementtype x ):返回線性表中x的位置。若找不到則返回error;

bool insert( list l, elementtype x, position p ):將x插入在位置p並返回true。若空間已滿,則列印「full」並返回false;如果引數p指向非法位置,則列印「illegal position」並返回false;

bool delete( list l, position p ):將位置p的元素刪除並返回true。若引數p指向非法位置,則列印「position p empty」(其中p是引數值)並返回false。

裁判測試程式樣例:

#include

#include

#define maxsize 5

#define error -1

typedef enum bool;

typedef int elementtype;

typedef int position;

typedef struct lnode list;

struct lnode ;

list makeempty();

position find( list l, elementtype x );

bool insert( list l, elementtype x, position p );

bool delete( list l, position p );

int main()

scanf("%d", &n);

while ( n-- )

scanf("%d", &n);

while ( n-- )

return 0;/* 你的**將被嵌在這裡 */

輸入樣例:

61 2 3 4 5 6

36 5 1

2-1 6

輸出樣例:

full insertion error: 6 is not in.

finding error: 6 is not in.

5 is at position 0.

1 is at position 4.

position -1 empty deletion error.

full insertion error: 0 is not in.

position 6 empty deletion error.

full insertion error: 0 is not in.

這個其實是乙個函式題,他集中考察的是順序表的基本操作:初始化,插入,刪除,查詢。

我們來分步說,具體的幾個函式:

list makeempty()

首先利用malloc函式分配一段連續的空間,l->last指的是list l中最後乙個元素的下標。值得注意的是:

list l =

(list)

malloc

(sizeof

(struct lnode)

);

其中涉及到malloc函式的用法,可能不是很理解。具體參考:malloc函式的用法

對錶中進行插入時,首先要考慮以下幾種情況:

1.

if

(l->last == maxsize -1)

`

這時意味著list已經滿了,無法再進行插入。

2.

if

(p<

0|| p>

(l->last +1)

)

當插入位置是小於0,或者最後乙個元素位置的後乙個位置之後的位置,那麼這個時候位置無法進行插入,插入的位置是非法的。

3.當位置合法並且表不是滿的時候,插入乙個元素首先應該把其後面的元素依次把位置往後挪位置,空出位置,後來再將其放進去。注意迴圈的次數。

bool

insert

(list l, elementtype x, position p)

if(p<

0|| p>

(l->last +1)

)int i;

for(i = l-

>last+

1; i > p; i--

) l-

>data[i]

= x;

l->last++

;return

true

;}

首先判斷刪除的位置p,是否是合法的,注意區分刪除和插入的位置的不同。之後將刪除位置後面的元素挨著挨著往前挪,依舊注意迴圈。

bool

delete

(list l, position p)

for(j = p; j < l-

>last; j++

)//不可以取到等於

l->last--

;return

true

;}

position find

(list l, elementtype x)

return error;

}

將它遍歷一遍,從頭找到尾。

這個題主要考察順序表的基本操作,難度不是很大,主要注意的地方就是在插入換刪除操作上面。

6 2 順序表操作集 20 分

本題要求實現順序表的操作集。list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,position p 其中list結構定義如下...

6 2 順序表操作集 20分

本題要求實現順序表的操作集。函式介面定義 list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,position p 其中lis...

6 2 順序表操作集 20分

本題要求實現順序表的操作集。函式介面定義 list makeempty position find list l,elementtype x bool insert list l,elementtype x,position p bool delete list l,position p 其中lis...