线性表操作
总提交:2745 测试通过:576
描述
线性表是n个元素的有序集合(n³0),n是线性表中元素的个数,称为线性表的长度。可以用一组地址连续的存储单元依次存储线性表中元素,采用这种存储方式的线性表称为顺序表。
请在顺序表上实现运算,实现顺序表的逆置,删除表中所有元素值等于x的元素。
输入
三组数据,顺序表元素类型分别为整型、字符型和实型。
每一组第一行给出元素数目n(0<n≤1000),第二行给出元素数值,第三行给出待删除的元素。
输出
三组数据,每一组第一行为逆置后的顺序表元素,第二行是在此基础上删除指定元素后的顺序表元素
样例输入
8
1 2 3 7 5 6 7 8
7
3
a c m
h
4
1.2 3.4 5.6 7.8
1.2
样例输出
8 7 6 5 7 3 2 1
8 6 5 3 2 1
m c a
m c a
7.8 5.6 3.4 1.2
7.8 5.6 3.4
提示
该题属于南京邮电大学《数据结构A》实验一中的内容,验证的是课本代码,每一个输出元素后均有一个空格(包括最后一个元素),请慎重解答。
题目来源
CHENZ
C++ 模板类
#include<iostream>
using namespace std;
int lenA,lenB,lenC;
int delA;char delB;float delC;
template<class T>
void Input(T *array, int num) // input
{
for(int i=0;i<num;i++)
{
cin>>array[i];
}
}
template<class T>
void Output(T *array, int num) // Output
{
for (int i=num-1;i>-1;i--)
{
cout<<array[i]<<" ";
}
cout<<endl;
}
template <class T>
int Del(T *array,int num,T key) // delete
{
int k=0;
for (int i = 0; i < num; i++) {
if (array[i] != key) {
array[k++] = array[i];
}
}
num = k;
return num;
}
int main()
{
int *arrA;
cin>>lenA;
arrA = (int *) malloc(sizeof(int *)*lenA);
Input(arrA,lenA);
cin>>delA;
Output(arrA,lenA);
lenA=Del(arrA,lenA,delA);
Output(arrA,lenA);
//
char *arrB;
cin>>lenB;
arrB = (char *) malloc(sizeof(char *)*lenB);
Input(arrB,lenB);
cin>>delB;
Output(arrB,lenB);
lenB=Del(arrB,lenB,delB);
Output(arrB,lenB);
//
float *arrC;
cin>>lenC;
arrC = new float [lenC];
Input(arrC,lenC);
cin>>delC;
Output(arrC,lenC);
lenC=Del(arrC,lenC,delC);
Output(arrC,lenC);
}
Java
import java.util.*;
class Slist {
Object[] datas;
int length;
}
public class Main {
/*
* delete
*/
public static void del(Slist slist, Object key) {
int k = 0;
for (int i = 0; i < slist.length; i++) {
if (slist.datas[i].equals(key) == false) {
slist.datas[k++] = slist.datas[i];
}
}
slist.length = k;
}
/*
* print
*/
public static void print(Slist slist) {
for (int i = 0; i < slist.length; i++) {
System.out.print(slist.datas[i] + " ");
}
System.out.println();
}
/*
* reverse
*/
public static void reverse(Slist slist) {
Object tmp;
for (int i = 0; i < slist.length / 2; i++) {
tmp = slist.datas[i];
slist.datas[i] = slist.datas[slist.length - i - 1];
slist.datas[slist.length - i - 1] = tmp;
}
}
/*
* main
*/
public static void main(String[] args) {
Slist slist = new Slist();
Scanner cin = new Scanner(System.in);
/*
* intArrray
*/
slist.length = cin.nextInt();
slist.datas = new Object[slist.length];
for (int i = 0; i < slist.length; i++)
slist.datas[i] = cin.nextInt();
int delKey = cin.nextInt();
reverse(slist);
print(slist);
del(slist, delKey);
print(slist);
/*
* charArray
*/
slist.length = cin.nextInt();
slist.datas = new Object[slist.length];
String useless = cin.nextLine();
String tmp = cin.nextLine();
int xiabiao = 0;
for (int i = 0; xiabiao < slist.length; i = i + 2) {
slist.datas[xiabiao] = tmp.charAt(i);
xiabiao++;
}
char delKey1 = cin.nextLine().charAt(0);
reverse(slist);
print(slist);
del(slist, delKey1);
print(slist);
/*
* floatArray
*/
slist.length = cin.nextInt();
slist.datas = new Object[slist.length];
for (int i = 0; i < slist.length; i++)
slist.datas[i] = cin.nextFloat();
float delKey11 = cin.nextFloat();
reverse(slist);
print(slist);
del(slist, delKey11);
print(slist);
}
}