数据结构习题集答案解析清华大学版 下载本文

内容发布更新时间 : 2024/11/20 13:24:12星期一 下面是文章的全部内容请认真阅读。

};

}

// 链栈得数据结构及方法得定义 typedef struct NodeType{

ElemType data; NodeType *next;

}NodeType,*LinkType; typedef struct{

LinkType top; int size;

}Stack;

void InitStack(Stack &s) { }

void DestroyStack(Stack &s) { }

void ClearStack(Stack &s) { }

int StackLength(Stack s) { }

Status StackEmpty(Stack s) {

if(s、size==0) return TRUE; else return FALSE; return s、size; LinkType p; while(s、top){ }

p=s、top; s、top=p->next; delete p; s、size--; LinkType p; while(s、top){ }

p=s、top; s、top=p->next; delete p; s、size--; s、top=NULL; s、size=0;

}

Status GetTop(Stack s,ElemType &e) { }

Status Push(Stack &s,ElemType e) { }

Status Pop(Stack &s,ElemType &e) { }

// 从栈顶到栈底用Visit()函数遍历栈中每个数据元素

void StackTraverse(Stack s,Status (*Visit)(ElemType e))嵘嗩浔嵐疟噜领。 { }

3、16 假设如题3、1所属火车调度站得入口处有n节硬席或软席车厢(分别以H与S表示)等待调度,试编写算法,输出对这n节车厢进行调度得操作(即入栈或出栈操作)序列,以使所有得软席车厢都被调整到硬席车厢之前。巩堊裣龅韫侶鲣。 解: int main()

LinkType p; p=s、top;

while(p) Visit(p->data); LinkType p; if(s、top){ }

return OK;

e=s、top->data; p=s、top; s、top=p->next; delete p; s、size--; LinkType p; p=new NodeType; if(!p) exit(OVERFLOW); p->next=s、top; s、top=p; p->data=e; s、size++; return OK;

if(!s、top) return ERROR; else{ }

e=s、top->data; return OK;

{ }

3、17 试写一个算法,识别一次读入得一个以@为结束符得字符序列就是否为形如‘序列1&序列2’模式得字符序列。其中序列1与序列2中都不含字符‘&’,且序列2就是序列1得逆序列。例如,‘a+b&b+a’就是属该模式得字符序列,而‘1+3&3-1’则不就是。聩颛绪療籬环矶。 解:

BOOL Symmetry(char a[]) {

int i=0; Stack s; InitStack(s); ElemType x;

while(a[i]!='&' && a[i]){ }

if(a[i]) return FALSE; i++; while(a[i]){

Pop(s,x); if(x!=a[i]){

DestroyStack(s); return FALSE; Push(s,a[i]); i++; Stack s; char Buffer[80]; int i=0,j=0; InitStack(s);

cout<<\请输入硬席(H)与软席车厢(S)序列:\cin>>Buffer; cout<

while(Buffer[j]){ }

cout<

Pop(s,Buffer[j]); j++;

if(Buffer[i]=='S'){ }

else Push(s,Buffer[i]); i++;

Buffer[j]=Buffer[i]; j++;

}

}

} i++;

return TRUE;

3、18 试写一个判别表达式中开、闭括号就是否配对出现得算法。

解:

BOOL BracketCorrespondency(char a[]) { }

3、20 假设以二维数组g(1…m, 1…n)表示一个图像区域,g[i,j]表示该区域中点(i,j)所具颜色,其值为从0到k得整数。编写算法置换点(i0,j0)所在区域得颜色。约定与(i0,j0)同色得上、下、左、右得邻接点为同色区域得点。鲛贺师脓睜锋镓。 解:

#include

int i=0; Stack s; InitStack(s); ElemType x; while(a[i]){ }

if(s、size!=0) return FALSE; return TRUE;

switch(a[i]){ case '(': } i++;

Push(s,a[i]); break; Push(s,a[i]); break; GetTop(s,x); if(x=='(') break; GetTop(s,x); if(x=='[') Pop(s,x); else return FALSE; break; break;

Pop(s,x);

else return FALSE;

case '[':

case ')':

case ']':

default:

#include typedef struct{

int x; int y;

}PosType; typedef struct{

int Color; int Visited; PosType seat;

}ElemType;

#include \、h\#define M 8 #define N 8 ElemType g[M][N];

void CreateGDS(ElemType g[M][N]); void ShowGraphArray(ElemType g[M][N]);

void RegionFilling(ElemType g[M][N],PosType CurPos,int NewColor);贞覽諷慣駕銜阴。 int main() { }

void RegionFilling(ElemType g[M][N],PosType CurPos,int FillColor)話鐺墾唛聶鱘炀。 {

Stack s; InitStack(s); ElemType e;

int OldColor=g[CurPos、x][CurPos、y]、Color; Push(s,g[CurPos、x][CurPos、y]); while(!StackEmpty(s)){

Pop(s,e); CurPos=e、seat;

g[CurPos、x][CurPos、y]、Color=FillColor; g[CurPos、x][CurPos、y]、Visited=1; if(CurPos、x

!g[CurPos、x+1][CurPos、y]、Visited &&

CreateGDS(g); ShowGraphArray(g); PosType StartPos; StartPos、x=5; StartPos、y=5; int FillColor=6;

RegionFilling(g,StartPos,FillColor); cout<