更多"设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。"的相关试题:
[简答题]设顺序表L是一个递减有序表,试写一算法,将x插入其后仍保持L的有序性。
[简答题]设顺序表中的数据元素递增有序,编写一算法将元素X插入到顺序表的适当位置上,并保证该表的有序性。
[简答题]单链表L是一个带有头结点的有序链表,设计一个算法判断L是否为按数值递减的链表。如果l是递减链表,那么就返回1,否则返回0。请回答下列问题:
给出算法的主要思想;
[填空题]1】
假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。
例如:链表初始元素为:
(7, 10,10,21,30,42,42,42,51,70)
经算法操作后变为:
(7,10,21,30,42,51,70)
【函数3.1】
void deleteklist(LinkList head)
LinkNode * p, * q;
p=head->next;
while(p!=head)
q=p->next;
while( (1) )
(2) ;
free(q);
q=p->next;
p=p->next;
【说明3.2】
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
【函数3.2】
#include<istream.h>
typedef struct node
int data;
stuct node leftChild, rightchild;
BintreeNode;
typedef BintreeNode * BinaryTree;
void ConstrncTree(int T[], int n, int i, BintreeNode * &ptr)
if(i>=n) (3) ; /*置根指针为空*/
else
ptr=-(BTNode * )malloc(sizeof(BTNode) )
ptr->data=T[i];
Cons
[填空题]1】
假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。
例如:链表初始元素为:
(7, 10,10,21,30,42,42,42,51,70)
经算法操作后变为:
(7,10,21,30,42,51,70)
【函数3.1】
void deleteklist(LinkList head)
{
LinkNode * p, * q;
p=head->next;
while(p!=head)
{
q=p->next;
while( (1) )
{
(2) ;
free(q);
q=p->next;
}
p=p->next;
}
}
【说明3.2】
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
【函数3.2】
#include<istream.h>
typedef struct node {
int data;
stuct node leftChild, rightchild;
} BintreeNode;
typedef BintreeNode * BinaryTree;
void ConstrncTree(int T[], int n, int i, BintreeNode * &ptr)
if(i>=n) (3) ; /*置根指针为空*/
else
{
ptr=-(BTNode * )malloc(sizeof(BTNode) )
ptr->data=T[i];
ConstrucTree(T,n,2, i+1, (4) );
ConstrucTree(T,n, (5) ,ptr->rightchild);
}
}
[填空题][函数说明3.1]
假设以带头结点的单循环链表作非递减有序线性表的存储结构。函数deleteklist(LinkList head)的功能是删除表中所有数值相同的多余元素,并释放结点空间。
[函数3.1]
Void deleteklist (LinkList head)
LinkNode *p,*q;
p=head->next;
while (p!=head)
q=p->next;
while( (1) )
(2) ;
free(q);
q=p->next;
p=p->next;
[函数说明3.2]
已知一棵完全二叉树存放于一个一维数组T[n]中,T[n]中存放的是各结点的值。下面的程序的功能是:从T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。
[函数3.2]
#include<istream.h>
typedef struct node
int data;
stuct node leftChild,rightchild;
BintreeNode;
typedef BintreeNode *BinaryTree;
void ConstrucTree(int T[] , int n, int i, BintreeNode *&ptr)
if(i>=n) (3) ; /*置根指针为空*/
else
ptr=(BTNode*) malloc(sizeof(BTNode))
ptr->data=T[i];
ConstrucTree (T,n, 2*i+1, (4) );
ConstrucTree (T,n, (5) ,ptr->rightchild);
main(void)
/*根据顺序存储结构建立二叉链表*/
Binarytree bitree;
[单项选择]将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是 (28) 。
A. n-1
B. n
C. 2n-1
D. 2n
[单项选择]在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是()。
A. O(1)
B. O(n)
C. O(nlogn)
D. O(n2)
[简答题]【说明】
本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:
creatList( ): 创建从小到大的有序链表。
multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。
print( ): 打印链表。
【C++代码】
#include <iostream>
using namespace std;
class List;
class Node{
friend class List;
public:
Node(int data){
(1) ;
}
private:
int data;
Node *next;
};
class List{
public:
List( ){list=NULL;}
void multiplyList(List L1, List L2);
void creatList( );
void print( );
private:
Node *list;
};
void List::creatList( )
{
Node *p, *u, *pre;
int dara;
list=NULL;
wbile(1){
cout<<"输入链表的一项: (小于零,结束链表) "<<endl;
cin>>data;
if(dara<0)break;//小于零,结束输入
p=list;
while(p !=NULL && dara>p->data){//查找插入点
pre=p;
p=p->next;
}
u= (2) ;
if(p==list)list=u;
else pre->next=u;
(3) ;
}
}
void List::multipl
[多项选择]【说明】
本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一项由类 Node描述,而链表由List描述,类List的成员函数有以下几个:
creatList( ): 创建从小到大的有序链表。
multiplyList(List L1, Llst L2): 将链表L1和链表L2合并。
print( ): 打印链表。
【C++代码】
#include <iostream>
using namespace std;
class List;
class Node
friend class List;
public:
Node(int data)
(1) ;
private:
int data;
Node *next;
;
class List
public:
List( )list=NULL;
void multiplyList(List L1, List L2);
void creatList( );
void print( );
private:
Node *list;
;
void List::creatList( )
Node *p, *u, *pre;
int dara;
list=NULL;
wbile(1)
cout<<"输入链表的一项: (小于零,结束链表) "<<endl;
cin>>data;
if(dara<0)break;//小于零,结束输入
p=list;
while(p !=NULL && dara>p->data)//查找插入点
pre=p;
p=p->next;
u= (2