西工大数据结构NOJ001:顺序表的插入运算
前言:
noj的所有题目都是使用c++写的,风格偏向面向对象的语言,因为struct
在c++中就相当于属性和方法都为public的一个类,并且在内存的使用上会比class
更小一点,很讨厌c语言那样写一堆函数,我觉得结构化的写法更清晰易懂。
因为二十号就要考试了,所以把每道题的解题思路写下来也算是做了一个复习吧
题目描述:
已知顺序表 L 递增有序,编写程序,将 X 插入到线性表的适当位置上,以保持线性表的有序性。
第一行输入顺序表元素个数 elenum;(0<elenum<1000)
第二行输入顺序表 L;
第三行输入插入值 X。
要求输出插入 X 后的有序顺序表
第一题非常的简单,就只要找到要插入的位置就行了
#include <iostream>
using namespace std;
#define MAXSIZE 100
struct SqList{
int elem[MAXSIZE];
int length;//线性表的长度
SqList(int length){
this->length=length;
}//直接使用构造函数,在造对象的时候长度就可以根据输入确定了
void PrintList(){
for(int i=0;i<length;i++){
cout<<elem[i]<<" ";
}
}
//输出这个线性表的所有元素
void insert(int e){
int pos=0;
for(int i=0;i<length;i++){
if(e>=elem[i]){
pos++;
}
}//找到要插入的位置,pos代表位置
for(int j=length-1;j>=pos;j--){
elem[j+1]=elem[j];
}//数组的每个元素都向后移动
length++;
elem[pos]=e;
}
};
int main(int argc, char const *argv[])
{
int length;
cin>>length;
SqList L(length);
for(int i=0;i<length;i++){
cin>>L.elem[i];
}
int e;
cin >> e;
L.insert(e);
L.PrintList();
return 0;
}