Description
已知顺序表L递增有序,编写程序,将X插入到线性表的适当位置上,以保持线性表的有序性。
Input
第一行输入顺序表元素个数elenum;(0<elenum<1000) 第二行输入顺序表L; 第三行输入插入值X。
Output
输出插入X后的有序顺序表
-
Sample Input7 2 3 4 5 6 7 8 1 -
Sample Output
1 2 3 4 5 6 7 8
数组:
#include<iostream>
using namespace std;
int main(){
int ary[1005];
int n,m,i,tmp,flag=0;
cin>>n;
for(i=0;i<n;i++){
cin>>ary[i];
}
cin>>m;
for(i=0;i<n-1;i++){
if(m<ary[0]){
tmp=0;
flag=1;
break;
}
else if(m>=ary[i]&&m<=ary[i+1]){
tmp=i+1;
flag=1;
break;
}
}
if(flag){
for(i=n;i>=tmp;i--){
ary[i]=ary[i-1];
}
ary[tmp]=m;
}
else{
ary[n]=m;
}
cout<<ary[0];
for(i=1;i<n+1;i++){
cout<<" "<<ary[i];
}
cout<<endl;
return 0;
}
链表:
#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
int n,m,i;
typedef struct node{
int num;
node* next;
}node;
node *head,*p,*q,*r;
cin>>n;
head=(node*)malloc(sizeof(node));
q=head;
for(i=0;i<n;i++){
p=(node*)malloc(sizeof(node));
cin>>(p->num);
q->next=p;
q=p;
}
q->next=NULL;
cin>>m;
r=head->next;
if(m<=(r->num)){
p=(node*)malloc(sizeof(node));
p->num=m;
p->next=r;
head->next=p;
}
else if(m>=(q->num)){
p=(node*)malloc(sizeof(node));
p->num=m;
p->next=NULL;
q->next=p;
}
else{
q=head->next;
r=q->next;
while(r){
if(m>(q->num)&&m<=(r->num)){
p=(node*)malloc(sizeof(node));
p->num=m;
p->next=r;
q->next=p;
break;
}
else{
q=r;
r=r->next;
}
}
}
r=head->next;
while(r){
if(r->next==NULL){
cout<<r->num<<endl;
break;
}
else{
cout<<r->num<<" ";
r=r->next;
}
}
return 0;
}



复习:
#include<stdio.h>
#include<stdlib.h>
#define Max 100
typedef struct SeqList{
int array[Max];
int num;
}SeqList;
void init(SeqList *p){
int i;
for(i = 0; i < p->num; i++){
scanf("%d", &p->array[i]);
}
}
void insert(SeqList *p, int m){
int i, j;
if(m <= p->array[0]){
for(i = p->num; i >= 1; i--){
p->array[i] = p->array[i-1];
}
p->array[0] = m;
}
else if(m >= p->array[p->num-1]){
p->array[p->num] = m;
}
else{
for(i = 0; i < p->num-1; i++){
if(m >= p->array[i] && m <= p->array[i+1]){
for(j = p->num; j >=i+1; j--){
p->array[j] = p->array[j-1];
}
p->array[i+1] = m;
break;
}
}
}
(p->num)++;
}
void Delete(SeqList *p, int m){
int i, j;
for(i = 0; i < p->num; i++){
if(p->array[i] ==m ){
for(j = i ;j <p->num-1; j++){
p->array[j] = p->array[j+1];
}
break;
}
}
(p->num)--;
}
void output(SeqList *p){
int i;
for(i = 0; i < p->num; i++){
printf("%d ", p->array[i]);
}
printf("\n");
}
int main(){
int i, m;
SeqList *p = (SeqList*)malloc(sizeof(SeqList));
scanf("%d", & p->num);
init(p);
scanf("%d", &m);
insert(p, m);
Delete(p, m);
output(p);
return 0;
}
这篇博客介绍了如何在已知递增有序的顺序表中,通过编程实现将新元素X正确插入并保持线性表的有序性。内容包括输入顺序表元素个数、顺序表本身及待插入值X,输出插入后的有序顺序表。示例展示了数组和链表两种数据结构的情况,并提及了相关复习知识点。

5879

被折叠的 条评论
为什么被折叠?



