# OJ实验题454线性表的顺序存储结构与操作

``````#include<iostream>
using namespace std;
class List{
public:
List();
~List(){}
void Insert(int i,int x);
void Get(int i);
void Find(int x);
void Delete(int i);
void PrintList();
private:
int data[20];
int len;
};
List::List(){
len = 0;
}
void List::Insert(int i, int x){
if(len >= 20){
cout << "上溢" <<endl;
}
if(i < 1 || i > len+1){
cout << "位置不正确" << endl;
}
for(int j = len; j >= i; j--){
data[j] = data[j-1];
}
data[i-1] = x;
len++;
}
void List::Get(int i){
if(i < 1 && i > len){
cout << "位置不正确" << endl;
}
else{
cout << data[i-1] << endl;
}
}
void List::Find(int x){
int count = 0;
for(int i = 0; i < len; i++){
if(data[i] == x){
cout << i+1 << endl;
count = 1;
}
}
if(count == 0){
cout << "None" << endl;
}
}
void List::Delete(int i){
int x;
int j;
if(len == 0){
cout << "下溢" << endl;
}
if(i < 1 || i > len){
cout << "位置不正确" << endl;
}
else{
x = data[i-1];
for(j = i; j < len; j++){
data[j-1] = data[j];
}
len--;
cout << x << endl;
}
}
void List::PrintList(){
for(int i = 0; i < len; i++){
cout << data[i] << endl;
}
}
int main()
{
int i;
int x;
int m;
char n;
List q;
while(1){
cin >> n;
if(n == 'I'){
cin >> m;
for(int j = 0; j < m; j++){
cin >> i;
cin >> x;
q.Insert(i,x);
}
}
else if(n == 'S'){
cin >> x;
q.Find(x);
}
else if(n == 'G'){
cin >> i;
q.Get(i);
}
else if(n == 'D'){
cin >> i;
q.Delete(i);
}
else if(n == 'V'){
q.PrintList();
}
else if(n == 'E'){
return 0;
}
else{
break;
}
}
return 0;
}

``````

• 写回答

#### 1条回答默认 最新

• uyoj661 2021-09-21 17:09
关注
``````
#include <iostream>

#define MAXSIZE 20

using namespace std;

class SeqList {
public:
SeqList():len_(0) {}

public:
void Insert(int pos, int val);
int Delete(int pos);
int Search(int val);
int Get(int pos);
void Print();

private:
int arr_[MAXSIZE];
int len_;
};

void SeqList::Insert(int pos, int val) {
if (len_ == MAXSIZE) throw "上溢";
if (pos < 1 || pos > MAXSIZE) throw "位置不正确";

for (int i = len_; i > pos - 1; i--) {
arr_[i] = arr_[i - 1];
}
arr_[pos - 1] = val;

len_++;
}

void SeqList::Print() {
for (int i = 0; i < len_; i++) {
cout << arr_[i] << endl;
}
}

int SeqList::Delete(int pos) {
if (len_ == 0) throw "下溢";
if (pos < 1 || pos > len_ + 1) throw "位置不正确";

int deletedVal = arr_[pos - 1];

for (int i = pos; i < len_; i++) {
arr_[i - 1] = arr_[i];
}

len_--;

return deletedVal;
}

int SeqList::Get(int pos) {
if (pos < 1 || pos > len_ + 1) throw "位置不正确";

return arr_[pos - 1];
}

int SeqList::Search(int val) {
bool isFind = false;
int pos;

for (int i = 0; i < len_; i++) {
if (arr_[i] == val) {
isFind = true;
pos = i + 1;
break;
}
}

if (isFind == false) throw "None";

return pos;
}

int main() {
SeqList list;
char command;
int n, pos, val;

while (cin >> command) {
if (command == 'E') break;

try {
switch (command) {
case 'I':
cin >> n;
for (int i = 0; i < n; i++) {
cin >> pos >> val;
list.Insert(pos, val);
}
break;

case 'D':
cin >> pos;
cout << list.Delete(pos) << endl;
break;

case 'S':
cin >> val;
cout << list.Search(val) << endl;
break;

case 'G':
cin >> pos;
cout << list.Get(pos) << endl;
break;

case 'V':
list.Print();
break;
}
} catch (const char* str) {
cout << str << endl;
}
}

return 0;
}
``````
本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 10月15日
• 已采纳回答 10月7日
• 创建了问题 9月21日

#### 悬赏问题

• ¥15 workstation加载centos进入emergency模式，查看日志报警如图，没有XFS,怎样解决呢？
• ¥20 求各位解释一道区间DP
• ¥15 应用商店如何检测在架应用内容是否违规？
• ¥15 Ubuntu系统配置PX4
• ¥50 nw.js调用activex
• ¥15 数据库获取信息反馈出错，直接查询了ref字段并且还使用了User文档的_id而不是自己的
• ¥15 将安全信息用到以下对象时发生以下错误：c:dumpstack.log.tmp 另一个程序正在使用此文件，因此无法访问
• ¥15 速度位置规划实现精确定位的问题
• ¥15 MAC虚拟机（win11）USB插上后无串口com，无法烧录