codeup1326 鍊錶的基本操作

2021-08-26 05:41:34 字數 2729 閱讀 8930

時空限制    1000ms/32mb

鍊錶是資料結構中一種最基本的資料結構,它是用鏈式儲存結構實現的線性表。它較順序表而言在插入和刪除時不必移動其後的元素。現在給你一些整數,然後會頻繁地插入和刪除其中的某些元素,會在其中某些時候讓你查詢某個元素或者輸出當前鍊錶中所有的元素。

下面給你基本的演算法描述:

圖1:鍊錶型別的定義以及獲得鍊錶元素的演算法描述

圖2:鍊錶的插入演算法描述

圖3:鍊錶的刪除演算法描述

圖4:鍊錶的建立演算法描述

輸入資料只有一組,第一行有n+1個整數,第乙個整數是這行餘下的整數數目n,後面是n個整數。這一行整數是用來初始化列表的,並且輸入的順序與列表中的順序相反,也就是說如果列表中是1、2、3那麼輸入的順序是3、2、1。

第二行有乙個整數m,代表下面還有m行。每行有乙個字串,字串是「get」,「insert」,「delete」,「show」中的一種。如果是「get」或者「delete」,則其後跟著乙個整數a,代表獲得或者刪除第a個元素;如果是「insert」,則其後跟著兩個整數a和e,代表在第a個位置前面插入e;「show」之後沒有整數。

如果獲取成功,則輸出該元素;如果刪除成功則輸出「delete ok」;如果獲取失敗或者刪除失敗,則輸出「get fail」以及「delete fail」。如果插入成功則輸出「insert ok」,否則輸出「insert fail」。如果是「show」則輸出列表中的所有元素,如果列表是空的,則輸出「link list is empty」。注:所有的雙引號均不輸出。

3 3 2 1

21show

delete 1

show

delete 2

show

delete 1

show

delete 2

insert 2 5

show

insert 1 5

show

insert 1 7

show

insert 2 5

show

insert 3 6

show

insert 1 8

show

get 2

1 2 3

delete ok

2 3delete ok

2delete ok

link list is empty

delete fail

insert fail

link list is empty

insert ok

5insert ok

7 5insert ok

7 5 5

insert ok

7 5 6 5

insert ok

8 7 5 6 5

7

1、因為輸入資料中含有大量的插入和刪除操作(不管你信不信,反正我信了),所以必須使用鍊錶,否則很可能會超時。這也是考查鍊錶的特性吧。

2、初始化鍊錶的元素是倒序的,這個使用題目中建立列表的方法(從頭部插入)就可以了。

總結:

這題考查的是鍊錶的特性。順序表中,怎樣判斷何時使用順序表何時使用鍊錶呢?就要看它們的特點了。順序表的特點是隨機訪問、隨機訪問,也就是說如果訪問和查詢比較頻繁的話使用順序表比較合適;鍊錶的特點是插入和刪除時不必移動其後的節點,如果插入和刪除操作比較頻繁的話使用鍊錶比較合適。

#include#includeusing namespace std;

struct node;

int n,m;

void create(node *&head)

}void show(node *head) //表空

cout

node *p = head->next;

while (p)

cout

if (p->next==null)

else p = p->next;

cout

delete q;

cout<

return;

} node *p = head;

for (int i=1; i<=pos-2; i++) //pos>1

if (p->next==null)

else p = p->next;

if (p->next==null) //p為鏈尾

node *q = p->next;

p->next = q->next;

delete q;

cout<

}void insert(node *&head,int pos,int x)

else cout<1

return;

} //以下非空表

if (pos==1)

node *p = head;

for (int i=1; i<=pos-2; i++) //pos>1

if (p->next==null)

else p = p->next;

if (p->next==null)

node *q = new node;

q->data = x;

q->next = p->next;

p->next = q;

cout<

}int main() //取值

else if (s[0]=='d') //刪除

else //插入

} return 0;

}

hncu1326鍊錶

鍊錶是資料結構中一種最基本的資料結構,它是用鏈式儲存結構實現的線性表。它較順序表而言在插入和刪除時不必移動其後的元素。現在給你一些整數,然後會頻繁地插入和刪除其中的某些元素,會在其中某些時候讓你查詢某個元素或者輸出當前鍊錶中所有的元素。下面給你基本的演算法描述 圖1 鍊錶型別的定義以及獲得鍊錶元素的...

鍊錶的基本操作

include include include include using namespace std struct listnode void initnode listnode node bool isempty listnode head void pushfront listnode hea...

鍊錶的基本操作

鍊錶操作是最基本的 必須掌握的知識點,最好滾瓜爛熟,透徹理解。工作時間短用的也不夠頻繁,還是總結一下比較好,以加強鞏固。1.單鏈表 結點形式 區分幾個概念 首節點 第乙個元素所在節點。頭指標 指向首節點的指標。頭結點 為了操作方便,在第乙個節點之前附設的乙個結點,此時指向頭結點的為頭指標。基本操作 ...