数据结构

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4-1 另类堆栈(10分)

在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满?

函数接口定义:

裁判测试程序样例:

bool Push( Stack S, ElementType X )

{

if(S->Top==S->MaxSize)

{

printf("Stack Full\n");

return false;

}

else

{

S->Data[S->Top]=X;

S->Top++;

}

return true;

}

ElementType Pop( Stack S )

{

if(S->Top==0)

{

printf("Stack Empty\n");

return ERROR;

}

else

{

S->Top--;

}

return S->Data[S->Top ];

}

4-2 二叉搜索树的操作集(20分)

本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:

指针;

裁判测试程序样例:

BinTree Insert( BinTree BST, ElementType X ){

if(!BST) {

BST = (BinTree)malloc(sizeof(struct TNode));

BST ->Data = X;

BST ->Left = BST ->Right = NULL;

}else {

if(X < BST ->Data )

{

BST ->Left = Insert(BST ->Left, X);

}

else if(X > BST ->Data ) {

BST ->Right = Insert(BST ->Right, X);

}

}

return BST;

}

BinTree Delete( BinTree BST, ElementType X ){

Position Tmp;

if(!BST) printf("Not Found\n");

else {

if( X < BST->Data)

BST ->Left = Delete(BST->Left, X); else if(X > BST->Data )

BST ->Right = Delete(BST->Right , X); else { if(BST->Left && BST->Right) { Tmp=FindMin(BST->Right); BST->Data = Tmp ->Data;

BST->Right=Delete(BST->Right,BST->Data); }else { Tmp = BST;

if(!BST->Left) BST = BST->Right; else if(!BST->Right) BST = BST->Left; free(Tmp); }

}

}

return BST;

}

Position Find( BinTree BST, ElementType X ){

if(!BST) return NULL;

if(BST->Data==X) return BST;

if(X>BST->Data) return Find(BST->Right,X);

if(XData) return Find(BST->Left,X);

}

Position FindMin( BinTree BST ){

if(BST){

while(BST->Left){

BST=BST->Left;

}

}

return BST;

}

Position FindMax( BinTree BST ){

if(BST){

while(BST->Right){

BST=BST->Right;

}

}

return BST;

}

4-4 求二叉树高度(20分) 本题要求给定二叉树的高度。

函数接口定义:

要求函数返回给定二叉树BT的高度值。裁判测试程序样例:

输出样例(对于图中给出的树):

int GetHeight( BinTree BT )

{

int LD,RD;

if(BT == NULL){

return 0;

}

else{

LD = GetHeight(BT->Left);

RD = GetHeight(BT->Right);

return (LD>RD?LD:RD)+1;

}

}

4-5 链表拼接(20分)

本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下:

函数接口定义:

指针。

裁判测试程序样例:

tNode *list2)

{

struct ListNode *p1,*p2,*p3,*t;

p3=list2;

do

{

t=p3;

p3=p3->next;

p2=p1=list1;

while(p1!=NULL)

{

if(p1->data>=t->data)

break;

else

{

p2=p1;

p1=p1->next;

}

}

if(p1==NULL)

{

p2->next=t;

t->next=NULL;

相关文档
最新文档