您的位置:首页 > 理论基础 > 数据结构算法

数据结构总结:(一)顺序表

2013-12-03 12:36 253 查看
ps: 插入删除要小心,注意插入的位置pos。。。

白老师 OJ:

Input

第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据
第2行输入要插入的位置和新数据
第3行输入要插入的位置和新数据
第4行输入要删除的位置
第5行输入要删除的位置
第6行输入要查找的位置
第7行输入要查找的位置

Output

数据之间用空格隔开

第1行输出创建后的顺序表内容,包括顺序表实际长度和数据

每成功执行一次操作(插入或删除),输出执行后的顺序表内容

每成功执行一次查找,输出查找到的数据

如果执行操作失败(包括插入、删除、查找等失败),输出字符串error,不必输出顺序表内容

Sample Input

6 11 22 33 44 55 66

3 777

1 888

1

9

0

5

Sample Output

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

#include <stdio.h>
int A[10];
int n;
void print(){
printf("%d ", n);
int i;
for(i=0;i<n;++i)
printf("%d ", A[i]);
printf("\n");
}

void insert(int pos, int value){
int i;
pos--;
if(pos <0 || pos > n){printf("error\n"); return;}
for(i=n-1;i>=pos;--i){
A[i+1] = A[i];
}
A[pos] = value;
++n;
print();
}

void delete(int pos){
int i;
pos--;
if(pos <0 || pos > n-1){printf("error\n"); return;}
for(i=pos;i<n;++i)
A[i] = A[i+1];
--n;
print();
}

void find(int pos){
if(pos <1 || pos > n) {printf("error\n"); return;}
else printf("%d\n", A[pos-1]);
}

int main(int argc, char const *argv[])
{
int t, i, pos, value;
scanf("%d", &n);
for(i=0;i<n;++i)
scanf("%d", &A[i]);
print();

scanf("%d", &pos);
scanf("%d", &value);
insert(pos, value);

scanf("%d", &pos);
scanf("%d", &value);
insert(pos, value);

scanf("%d", &pos);
delete(pos);

scanf("%d", &pos);
delete(pos);

scanf("%d", &pos);
find(pos);

scanf("%d", &pos);
find(pos);

return 0;
}


Description

建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)

实现连续多个插入,即从位置i开始插入多个数据

实现连续多个删除,即从位置i开始删除多个数据

Input

第1行先输入n表示有n个数据,即n是实际长度;接着输入n个数据

第2行先输入i表示插入开始的位置,再输入k表示有k个插入数据,接着输入k个数据

第3行先输入i表示删除开始的位置,再输入k表示要删除k个数据

Output

顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开

第1行输出创建后的顺序表内容

第2行输出执行连续插入后的顺序表内容

第3行输出执行连续删除后的顺序表内容

Sample Input

6 11 22 33 44 55 66 2 3 99 88 77 4 5

Sample Output

6 11 22 33 44 55 66 9 11 99 88 77 22 33 44 55 66 4 11 99 88 66

#include <stdio.h>
int A[100];
int n;

void print(){
int i;
printf("%d ", n);
for(i=0;i<n;++i)
printf("%d ", A[i]);
printf("\n");
}

void insert(){
int i, num, pos;
scanf("%d %d", &pos, &num);
--pos;
for(i=n-1;i>=pos;--i){
A[i+num] = A[i];
}

for(i=0;i<num;++i)
scanf("%d", &A[i+pos]);
n+=num;
print();
}

void delete(){
int i, num, pos;
scanf("%d %d", &pos, &num);
--pos;
for(i=pos+num;i<n;++i){
A[i-num] = A[i];
}
n-=num;
print();
}

int main(int argc, char const *argv[])
{
int i;
scanf("%d", &n);
for(i=0;i<n;++i)
scanf("%d", &A[i]);
print();
insert();
delete();
return 0;
}


Description

建立顺序表的类,属性包括:数组、实际长度、最大长度(设定为1000)

已知两个递增序列,把两个序列的数据合并到顺序表中,并使得顺序表的数据递增有序

Input

第1行先输入n表示有n个数据,接着输入n个数据,表示第1个序列,要求数据递增互不等

第2行先输入m表示有m个数据,接着输入m个数据,表示第2个序列,要求数据递增互不等

Output

顺序表内容包括顺序表的实际长度和数据,数据之间用空格隔开

第1行输出创建后的顺序表内容

Sample Input

3 11 33 55 5 22 44 66 88 99

Sample Output

8 11 22 33 44 55 66 88 99

#include <stdio.h>
int A[50];
int B[50];
int C[100];

int main(int argc, char const *argv[])
{
int i, n1, n2;
scanf("%d", &n1);
for(i=0;i<n1;++i)
scanf("%d", &A[i]);
scanf("%d", &n2);
for(i=0;i<n2;++i)
scanf("%d", &B[i]);
int n3 = n1+n2;
int j, k;
j = k = 0;
for(i=0;i<n3;++i){
if(A[j] < B[k] && j < n1){
C[i] = A[j];
++j;
}
else if(A[j] >= B[k] && k < n2){
C[i] = B[k];
++k;
}
else if(j>=n1){
C[i] = B[k];
++k;
}
else if(k>=n2){
C[i] = A[j];
++j;
}
}
printf("%d ", n3);
for(i=0;i<n3;++i)
printf("%d ", C[i]);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: