设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。

作者&投稿:茹肤 (若有异议请与网页底部的电邮联系)
设顺序表中a中的数据元素递增有序,试写一算法将x插入到顺序表的适当位置,以保持该表的有序性。C语言版~

#include // a 顺序表 x 将要插入值 len 顺序表长度// 返回值为表a的新长度int insert(int x, int * a, int len){printf("%3d ins ", x); // 这句为了演示用,显示插入的数值int l, r, m;// 查找插入位置l = -1;r = len;m = (l + r) / 2;while(r - l > 1){if(a[m] r; l--) a[l] = a[l-1];a[l] = x;}return ++len;}void print(int *a, int l){int i;for(i=0; i<l; i++) printf("%4d", a[i]);printf("
");}void main(){int a[20] = {1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0};int len = 10;print(a, len);len = insert(20, a, len);print(a, len);len = insert(11, a, len);print(a, len);len = insert(10, a, len);print(a, len);len = insert(-1, a, len);print(a, len);len = insert(0, a, len);print(a, len);len = insert(1, a, len);print(a, len);len = insert(2, a, len);print(a, len);len = insert(55, a, len);print(a, len);}

#include
// a 顺序表 x 将要插入值 len 顺序表长度
// 返回值为表a的新长度
int insert(int x, int * a, int len)
{
printf("%3d ins ", x); // 这句为了演示用,显示插入的数值
int l, r, m;
// 查找插入位置
l = -1;
r = len;
m = (l + r) / 2;
while(r - l > 1)
{
if(a[m] < x) l = m;
else r = m;
m = l + (r - l) / 2;
}
if(r == len) a[r] = x;
else
{
for(l = len; l > r; l--) a[l] = a[l-1];
a[l] = x;
}
return ++len;
}
void print(int *a, int l)
{
int i;
for(i=0; i<l; i++) printf("%4d", a[i]);
printf("
");
}
void main()
{
int a[20] = {1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0};
int len = 10;
print(a, len);
len = insert(20, a, len);
print(a, len);
len = insert(11, a, len);
print(a, len);
len = insert(10, a, len);
print(a, len);
len = insert(-1, a, len);
print(a, len);
len = insert(0, a, len);
print(a, len);
len = insert(1, a, len);
print(a, len);
len = insert(2, a, len);
print(a, len);
len = insert(55, a, len);
print(a, len);
}
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
将表中元素一个接一个的存入一组连续的存储单元中,这种存储结构是顺序结构。
采用顺序存储结构的线性表简称为“ 顺序表”。顺序表的存储特点是:只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。
顺序表的结构定义:
#define maxlen 50 //定义顺序表中元素个数最多有几个
typedef struct
{
elementtype data[maxlen]; //elementtype是元素的类型 依具体情况而定
int listlen; //便于时刻了解顺序表里元素的个数
}seqlist; //顺序表的名称 不妨为seqlist
声明顺序表类型变量:
seqlist L,L1;
如顺序表的每个结点占用len个内存单元,用location (ki)表示顺序表中第i个结点ki所占内存空间的第1个单元的地址。则有如下的关系:location (ki+1) = location (ki) +len
location (ki) = location(k1) + (i-1)len
存储结构要体现数据的逻辑结构,顺序表的存储结构中,内存中物理地址相邻的结点一定具有顺序表中的逻辑关系。

#include <stdio.h>

// a 顺序表  x 将要插入值  len 顺序表长度

// 返回值为表a的新长度

int insert(int x, int * a, int len)

{

printf("%3d ins ", x); // 这句为了演示用,显示插入的数值

int l, r, m;

// 查找插入位置

l = -1;

r = len;

m = (l + r) / 2;

while(r - l > 1)

{

if(a[m] < x) l = m;

else r = m;

m = l + (r - l) / 2;

}

if(r == len) a[r] = x;

else

{

for(l = len; l > r; l--) a[l] = a[l-1];

a[l] = x;

}

return ++len;

}

void print(int *a, int l)

{

int i;

for(i=0; i<l; i++) printf("%4d", a[i]);

printf("
");

}

void main()

{

int a[20] = {1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0};

int len = 10;

print(a, len);

len = insert(20, a, len);

print(a, len);

len = insert(11, a, len);

print(a, len);

len = insert(10, a, len);

print(a, len);

len = insert(-1, a, len);

print(a, len);

len = insert(0, a, len);

print(a, len);

len = insert(1, a, len);

print(a, len);

len = insert(2, a, len);

print(a, len);

len = insert(55, a, len);

print(a, len);

}



设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。
void inList(SqlList L,int x){
if(L.length>=L.listsize)

newbase=(ElemType *)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));

if(!newbase)exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

for(i=1;i<=L.length;i++){

if(x<=L.elem[i]){
for(q=L.length;q>=i;q++)L.elem[q+1]=L.elem[q];
L.elem[i]=x;
break;
}
else {L.elem[L.length+1]=x;break;}
}
L.length++;
}

大学数据结构题目,递增顺序表插入元素
答:下面的程序先构造一个顺序表,输入n个元素。然后输入要插入的元素,插入完成后,该表仍然保持有序。include<stdio.h>#include<stdlib.h>#include<conio.h>#define LIST_INIT_SIZE 100struct list{int *data;int listsize;int listlength;};int create_list(struct list &l);int init_list(struct ...

有两个顺序表,其元素递增有序,设计一个算法,将这两个表合并到其中一个...
答:include <iostream> using namespace std;int * init(int *x , int &n){ cout<<"输入顺序表的大小:";cin>>n;x = (int*)malloc(sizeof(int) * n);cout<<"输入"<<n<<"个数据:"<<endl;for(int i = 0 ; i < n ; i++)cin>>x[i];return x;} int * hebing(int *a ...

数据结构的一道题目:已知顺序表La中的数据元素递增有序.把X插入到La中...
答:p=x if(l->next)l->next=q;while(q->next){ if(x>q->data && xnext){ p->next=q->next;q->next=p;free(p);free(q);break;} p=p->next }

在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一
答:元素的移动次数为n-i+1,选A。举例说明:如1 2 3。在第2个位置插入一个a,则变成:1 a 2 3,2和3分别后移一位,所以总共移动3+1-2=2次。顺序表的存储特点只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L  1≤i≤n 其中,L是元素占用...

已知长度为6的顺序表L中的数据均为整型且递增有序,现将一个整型元素a插...
答:void Bubble_2 ( int r[], int n){ int low = 0; int high= n -1; //设置变量的初始值 int tmp,j; while (low < high) { for (j= low; j< high; ++j) //正向冒泡,找到最大者 if (r[j]> r[j+1]) { tmp = r[j]; r[j]=r[j+1];r[j+...

重金悬赏数据结构题目答案!!!请发我QQ邮箱:75216813@qq.com
答:http://wenku.baidu.com/view/19ab8a80bceb19e8b8f6ba81.html 自己看。百度文库有答案

求解一道数据结构[C语言版]的题
答:用折半法!假设Y为递增的整数序列,用数组a[n]来表示:/ 设顺序表Y中的元素递增有序.试写一算法,将X插入到顺序表的适当位置上,以保持该表的有序性./ include <stdio.h> int* find(int *min,int *max,int i){ int *mid;if((max-min)>1){ //如果剩下超过2个数 mid=min+(max-...

数据结构假设分别以两个元素的值递增有序线性表a,b表示两个集合,现在...
答:include<iostream> using namespace std;struct Node { int data;Node *next;};class LinkList { public:Node * intLinkList(int a[],int n){ first=new Node;first->next=NULL;for(int i=(n-1);i>=0;i--){ Node *s;s=new Node;s->data=a[i];s->next=first->next;first->...

设计一个有序顺序表 数据结构(java)
答:package array;class OrderArray{ private long[] a;private int nElems;public OrderArray(int maxSize){ a = new long[maxSize];nElems = 0;} public void insert(long value){ int pos = 0;for(pos=0;pos<nElems;pos++){ if(a[pos]>value){ break;} } for(int i=nElems;i>pos...

...均为递增有序,将此列表归并成sc,并保持递增顺序
答:// 2.cpp : Defines the entry point for the console application.// include "stdafx.h"/*有两个顺序表La ,Lb 其数据元素均按从小到大的升序排列。要求将这个线性表合并为一个表Lc,Lc的元素也按照从小到达升序排列 / /*算法:首先建立顺序表Lc,使得Lc的大小等于La+Lb.依次扫描顺序表la lb...