顺序表的实现

顺序表的操作
Time Limit:1000MS  Memory Limit:65536K

Description

建立一个顺序表,然后在已建好的顺序表上实现顺序表插入和删除等基本操作。最后输出最终结果。
Input
有多组测试数据,每组数据由三部分组成。第一部分包含两个整数n(n<=1000)和m(m<=1000)n表示第二部分包含n个整数,m表示第三部分包含m个操作。操作项的格式有:insert i xdelete iinserti x 表示在第i个位置插入数字xdelete i表示删除第i个元素。当nm同时为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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值