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

作者&投稿:书钟 (若有异议请与网页底部的电邮联系)
//函数说明:
//先输入n,表示首先建立一个链表的元素个数
//然后输入n个元素,建立有序链表
//再输入要插入的元素,调用函数插入
//输出最终链表
#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node *next;
};

void insert(struct node *head,int x)//链表的插入函数
{
    struct node *p = head->next,*q = head;
    struct node *r = (struct node *)malloc(sizeof(struct node));//给新链结开内存
    r->data = x;
    while(p)//当游动指针不为空时
    {
        if(r->data < p->data)//寻找应该插入的位置
        {
            q->next = r;
            r->next = p;
            break;//插入完成后跳出(必须要跳出)
        }
        q = p;
        p = p->next;//如果没找到合适的插入点,继续向后找
    }
    if(!p)//遍历完整个链表依然没找到插入点,那这个节点一定比所有元素都大
    {
        q->next = r;
        r->next = NULL;//插入到最后
    }
}

void show(struct node *head)
{
    struct node *p = head->next;
    while(p)
    {
        printf("%d",p->data);
        if(p->next)
            printf(" ");
        p = p->next;
    }
    printf("
");
}

int main()
{
    struct node *head = (struct node *)malloc(sizeof(struct node));//给头结点开内存
    head->next = NULL;//当前无信息存储,头结点的下一个节点不存在,指针设为空
    int x,n,sr;
    printf("请输入要输入数的个数:
");
    scanf("%d",&n);
    for(int i = 1;i <= n;i++)//读入n个数,建立链表
    {
        printf("请输入第%d个数:
",i);
        scanf("%d",&sr);
        insert(head,sr);
    }
    printf("当前链表的排列为:
");
    show(head);//输出当前排列
    printf("请输入要插入的数:
");
    scanf("%d",&x);//输入要插入的数
    insert(head,x);//插入
    printf("插入元素%d后的链表为:
",x);
    show(head);//输出插入元素后的链表
    return 0;
}


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

#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
// 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 <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 ...

设顺序表L中数组元素递增有序,写一算法,将X插入到顺序表的适当位置
答:if(p1==NULL) // 如果没有头节点直接添加 { p=(NODE*),alloc(sizeof(struct node));p->x=data;p->next=( 3 NUll ); // 设置头节点的后向指针 if( 4 p2==NUll )/* 若插入的节点将成为头节点*/ ( 5 *phead )=p;else // ...

有序表A中的数据元素是按严格递增顺序排列的,有序表B中的数据元素是按...
答:两表均不为满二叉树。有序表A中的数据元素是按严格递增顺序排列的,因此对于任意一个元素,它的左子节点(如果存在的话)的值比它小,右子节点(如果存在的话)的值比它大。因此,A可以转换为二叉搜索树(BST),其中每个节点都有两个子节点(如果存在的话)。同样地,有序表B中的数据元素是按...

顺序表和有序表有什么区别?
答:顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中,最典型的例子就是数组。可以有这样描述:一个顺序表示的二叉树,或一个链接表示的二叉树;一个无序的线性表经过某种排序算法后形成有序表;甚至一个用顺序表表示的有序表等等。顺序表示例:...

已知性线表中的元素以值递增有序排列,并以单链表作存储结构。写一高效...
答:include<stdio.h> typedef struct list{ int key;struct list *next;}LIST;typedef struct{ LIST *next;int size;}HEAD;LIST *insert_to_inorder(LIST *old_listp,int key){ LIST *new_listp;if(old_listp == NULL){ new_listp = (LIST *)malloc(sizeof(LIST));new_listp->key = ...

数据结构:有序表和顺序表不一样吗?
答:有序表和顺序表不一样。有序表中的“有序”是逻辑意义上的有序,指表中的元素按某种规则已经排好了位置。顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中。数据结构在计算机中的表示称为数据的物理结构。它包括数据元素的表示和关系的表示。数据元素...

C语言顺序表问题:递增有序表(1~20)插入整数后仍递增有序。代码哪里有...
答:改了一点,你对着你的源程序看一下:include "stdio.h"include <malloc.h> typedef int datatype;typedef struct { datatype elem[1024];int length;}seqlist;void creatlist(seqlist *L){ int i;int temp;for(i=0;i<20;i++){ L->elem[i]=i+1;} L->length=20;} int find(seq...

假设顺序表L中的元素递增有序,设计算法在顺序表中插入元素x,要求插入...
答:没有顺序表的空间大小和已使用大小么?那我就只能假设顺序表已满并把最后一个元素舍去了。int i, j;for(i=0;i<L.length && x >= L[i];i++);//现在的i就是x的插入位置 for(j=L.length-1; j>i; j--)L[j] = L[j-1];//在循环的最后一次时就是L[i+1] = L[i]L[i] =...

有序表和顺序表是一个意思吗?
答:顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中,最典型的例子就是数组。可以有这样描述:一个顺序表示的二叉树,或一个链接表示的二叉树;一个无序的线性表经过某种排序算法后形成有序表;甚至一个用顺序表表示的有序表等等。数据的逻辑结构:指反映...

数据结构:有序表和顺序表不一样吗?
答:不一样。有序表中的“有序”是逻辑意义上的有序,指表中的元素按某种规则已经排好了位置。顺序表中的“顺序”是物理意义上的,指线形表中的元素一个接一个的存储在一片相邻的存储区域中,最典型的例子就是数组。可以这样描述:一个顺序表示的二叉树,或一个链接表示的二叉树;一个无序的线性表...