顺序表的操作
Time Limit:1000MS Memory Limit:65536K
Description
建立一个顺序表,然后在已建好的顺序表上实现顺序表插入和删除等基本操作。最后输出最终结果。
Input
有多组测试数据,每组数据由三部分组成。第一部分包含两个整数n(n<=1000)和m(m<=1000),n表示第二部分包含n个整数,m表示第三部分包含m个操作。操作项的格式有:insert
i x和delete i。inserti x
表示在第i个位置插入数字x,delete i表示删除第i个元素。当n和m同时为0时结束。
Output
对于每组数据,按顺序输出顺序表中的元素。输出结果占一行。
Sample Input
4 5
2 3 4 5
insert 2 6
delete 4
insert 2 9
insert 1 100
delete 4
0 0
Sample Output
100 2 9 3 5
方法一
用动态一维数组
#include <iostream>
#include <cstdio>
#include <string>
#include <cstdlib>
#include <cstring>
using namespace std;
/*
* 名称: 线性表的操作
* 方法: 用动态分配的一维数组实现
* 专业: 软件工程
* by : mazicwong
*/
typedef struct SqList{
int *elem;
int length;
int listsize;
// SqList (){}
SqList (int num){
elem=(int *)malloc(num*sizeof(int));
length=0;
listsize=num;
}
}SqList;
void insert_list(SqList &L,int index,int key)
{
int i;
for (i=L.length-1; i!=index-2; i--)
L.elem[i+1]=L.elem[i];
L.elem[++i]=key;
L.length++;
}
void delete_list(SqList &L,int index)
{
int i;
for (i=index; i!=L.length; i++)
L.elem[i-1]=L.elem[i];
L.length--;
}
int main()
{
int n,m,index,key;
cout<<"请输入线性表的最大长度,按回车键结束"<<endl;
int num;
cin>>num;
SqList L(num);
char str[15];
while (scanf("%d%d",&n,&m),n||m)
{
L.length=n;
for (int i=0;i<n;i++)
cin>>L.elem[i];
while (m--)
{
cin>>str;
if (!strcmp(str,"insert"))
{
cin>>index>>key;
insert_list(L,index,key);
}
else if (!strcmp(str,"delete"))
{
cin>>key;
delete_list(L,key);
}
}
for (int i=0;i<L.length;i++)
printf (i==L.length-1 ? "%d\n":"%d ",L.elem[i]);
}
return 0;
}