2017 数据结构作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、程序阅读填空 (数据结构)
1. 在顺序表中第 i 个位置插入新元素 x
template
if (i<0||i>last+1||last==MaxSize-1) return 0; //插入不成功
else {
last++;
for( ___int j=MaxSize-1_____________;j>i;j--)
___ data[j+1]=data[j]______________;
data[i] = x;
return 1; //插入成功
}
}
2.直接选择排序的算法
template
{ for(int i=0; i template for(int j=i+1;j< list.CurrentSize;j++) if(list.Vector[j].getKey() ___ k=j_________________;//当前具有最小关键码的对象 if(k!=i) Swap(list.Vector[i], list.Vector[k]); //交换 } 3、删去链表中除表头结点外的所有其他结点 template ListNode while (first→link!=NULL){ ____q=first->link ________; ____first->link=q->link _____; //将表头结点后第一个结点从链中摘下 delete q; //释放它 } last = first; //修改表尾指针 } 4、基于有序顺序表的折半搜索递归算法(Element为有序顺序表) template BinarySearch(const Type & x, const int low, const int high)const { int mid = -1; if ( low <= high ) { ____ mid=(low+high)/2_____; if ( Element[mid].getKey( ) < x ) mid = BinarySearch (_____x,mid+1,high _____); else if ( Element[mid].getKey( ) > x ) mid = BinarySearch ( x, low, mid -1 ); } return mid; } 5、在顺序表中第 i 个位置插入新元素x 。 int insert(sqlist *L, datatype x, int i) { int j; if (L->n==maxsize) {cout<<”表满,不能插入!(上溢)\n”; return –1; } if( i<0||i>=maxsize) {cout<<”非法插入位置!\n”; return 0;} for(j=L->n;j>=i;j--) L->data[j]=L->data[j-1]; //节点后移 L->data[j]=x; //插入x L->n++; //修改表长 Return 1; //插入成功 } 6、直接选择排序的算法 void SelectSort( list R, int n ) { int i, j, k; for (i=1; i<=n-1;i++) { //n-1趟排序 k=i ; for(j=i+1;j<=n,j++) //在当前无序区中找键值最小的记录R[k] if(R[j].key if(k!=i) {R[0]=R[i]; R[i]=R[k]; R[k]=R[0];} } } 二、简答题 1. 线性表可用顺序表或是链表存储,此两种存储表示各有哪些优缺点? 答:顺序存储表示是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。它的存储效率高,存取速度快。但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。 2. 设有一个输入数据的序列是{46,25,78, 62, 12, 37, 70, 29},试画出从空树起,逐个输入 各个数据而生成的二叉搜索树。 答:按顺序逐个输入 3.用广义表的带表头结点的存储表示法表示下列集合。 A = ( ) B = (6, 2) C = (‘a’,( 5, 3, ‘x’)) D = (B, C, A) E = (B, D)