題解
- 注意這裡的輸入是以1作為第一個元素的。
- 注意刪除、插入和查詢操作的有效範圍不一樣。刪除和查詢都是從0到n-1,而插入要比它們多一個,從0到n。
題目
問題 I: DS順序表--類實現
時間限制: 1 Sec 記憶體限制: 128 MB
提交: 921 解決: 314
[提交][狀態][討論版]
題目描述
實現順序表的用C++語言和類實現順序表
屬性包括:陣列、實際長度、最大長度(設定為1000)
操作包括:建立、插入、刪除、查詢
類定義參考
輸入
第1行先輸入n表示有n個資料,即n是實際長度;接著輸入n個資料
第2行輸入要插入的位置和新資料
第3行輸入要插入的位置和新資料
第4行輸入要刪除的位置
第5行輸入要刪除的位置
第6行輸入要查詢的位置
第7行輸入要查詢的位置
輸出
資料之間用空格隔開
第1行輸出建立後的順序表內容,包括順序表實際長度和資料
每成功執行一次操作(插入或刪除),輸出執行後的順序表內容
每成功執行一次查詢,輸出查詢到的資料
如果執行操作失敗(包括插入、刪除、查詢等失敗),輸出字串error,不必輸出順序表內容
樣例輸入
6 11 22 33 44 55 66
3 777
1 888
1
9
0
5
樣例輸出
6 11 22 33 44 55 66
7 11 22 777 33 44 55 66
8 888 11 22 777 33 44 55 66
7 11 22 777 33 44 55 66
error
error
44
提示
第i個位置是邏輯意義的位置,從1開始,在實際程式設計用陣列,從0開始,對應陣列i-1位置
程式碼塊
#include <iostream>
using namespace std;
class SeqList
{
private:
int *list;
int maxsize;
int size;
void list_display();
public:
SeqList();
~SeqList();
void list_create();
void list_insert();
void list_del();
void list_get();
};
SeqList::SeqList()
{
maxsize = 1000;
size = 0;
list = new int[maxsize];
}
SeqList::~SeqList()
{
delete []list;
}
void SeqList::list_create()
{
int i, n;
cin>>n;
size = n;
for(i=0; i<n; i++)
cin>>list[i];
cout<<size<<' ';
list_display();
}
void SeqList::list_insert()
{
int i, item;
cin>>i>>item;
if(0<i && i<=size+1)
{
for(int j=size-1; j>=i-1; j--)
list[j+1] = list[j];
list[i-1] = item;
size++;
cout<<size<<' ';
list_display();
}
else
cout<<"error"<<endl;
}
void SeqList::list_del()
{
int i;
cin>>i;
if(0<i && i<=size)
{
for(int j=i-1; j<size-1; j++)
list[j] = list[j+1];
size--;
cout<<size<<' ';
list_display();
}
else
cout<<"error"<<endl;
}
void SeqList::list_get()
{
int i;
cin>>i;
if(0<i && i<=size)
cout<<list[i-1]<<endl;
else
cout<<"error"<<endl;
}
void SeqList::list_display()
{
for(int i=0; i<size; i++)
cout<<list[i]<<' ';
cout<<endl;
}
int main(void)
{
SeqList myList;
myList.list_create();
myList.list_insert();
myList.list_insert();
myList.list_del();
myList.list_del();
myList.list_get();
myList.list_get();
return 0;
}