东北大学计算机专业(专业硕士)研究生入学考试2009真题
生活随笔
收集整理的這篇文章主要介紹了
东北大学计算机专业(专业硕士)研究生入学考试2009真题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
/*-----------------------------------------------數(shù)據(jù)結構部分---------------------------------------------------------*/
/*1.寫出將循環(huán)單鏈表中結點X的直接前驅刪除的算法(X為指針,且從X指向的結點出發(fā)進行刪除)。*/
typedef struct LNode
{ElemType data;struct LNode *next;
}LinkList;void deleteNode(LinkList *X)
{LinkList *p = NULL, *q = NULL; //q為搜索指針,指向X的前驅的前驅;p指向q后繼結點,即指向X的前驅q = X; //從X指向的結點開始while(q->next->next != X) //循環(huán)結束后q將指向X的前驅的前驅{q = q->next;}p = q->next;q->next = X; //將X的前驅刪除free(p);
} //對于鏈表的刪除算法有一個技巧就是要想刪除必須的知道要刪除結點的前驅結點,所以在設計算法的時候要記得把其前驅結點設出來/*2.設某二叉樹以二叉鏈表為存儲結構,設計算法將二叉樹中各結點的左右孩子位置互換。*/
//!!!!!!!考試的時候只寫交換部分的代碼就可以,平時練習就多練點吧
#include<stdio.h>
#include<stdlib.h>
#define max 20//定義樹的結點數(shù)typedef struct BTNode//定義二叉樹結點類型
{char data;//結點數(shù)據(jù)類型struct BTNode *lc,*rc;//左右指針
}BTree;BTree *createtree(char *str,int i,int m)//將字符串str中第i到第m個字符創(chuàng)建樹
{BTree *p;if(i >= m)return 0;p = (BTree*)malloc(sizeof(BTree));//生成新結點p->data = str[i];//將結點的第一個數(shù)據(jù)賦給根p->lc = createtree(str,2*i+1,m);//創(chuàng)建左子樹p->rc = createtree(str,2*i+2,m);//創(chuàng)建右子樹return (p);
}BTree *Exchange(BTree *p)//將p指針指向的二叉樹的左右子樹進行互換。
{BTree *stack[max];//指針類型的堆棧int k = 0;stack[k] = 0;if(p != NULL)//交換p結點的左右孩子{k++;stack[k] = p->lc;p->lc = p->rc;p->rc = stack[k];p->lc = Exchange(p->lc);p->rc = Exchange(p->rc);}return(p);
}void PreOrder(BTree *t)//先序遍歷
{if(t != NULL){printf("%c",t->data);if(t->lc){printf("->");PreOrder(t->lc);}if(t->rc){printf("->");PreOrder(t->rc);}}
}void InOrder(BTree *p)//中序遍歷
{if(p != NULL){InOrder(p->lc);printf("%c",p->data);printf("->");InOrder(p->rc);}
}void PostOrder(BTree *p)//后序遍歷
{if(p != NULL){PostOrder(p->lc);PostOrder(p->rc);printf("%c",p->data);printf("->");}
}void cengci(BTree *t,int m)//按層次遍歷,使用隊列
{BTree *queue[max], *p;int front = 0,rear = 0,i;queue[rear++] = t;while(front != rear){p = queue[front];front = (front+1)%m;printf("%c->",p->date);//輸出根結點if(p->lc != NULL)//遍歷左子樹{if((rear+1)%m != front){queue[rear] = p->lc;rear = (rear+1)%m;}}if(p->rc != NULL)//遍歷右子樹{if((rear+1)%m != front){queue[rear] = p->rc;rear = (rear+1)%m;}}}
}int main()
{int i,n;char str[max];BTree *root;//二叉樹根結點的指針printf("請輸入結點數(shù)目n:");scanf("%d",&n);getchar();printf("請輸入%d個結點:",n);for(i = 0;i < n;i++)str[i] = getchar();root = CreateTree(str,0,n); //創(chuàng)建樹root = Exchange(root);//交換左右子樹printf("左右子樹交換后!\n");printf("層次遍歷是:\n");cengci(root,n);printf("\n先序遍歷是:\n");PreOrder(root);printf("\n中序遍歷是:\n");InOrder(root);printf("\n后序遍歷是:\n");PostOrder(root);
}/*3.已知一棵二叉樹的前序序列和中序序列分別存于兩個一維數(shù)組中,試編寫算法建立該二叉樹的二叉鏈表。*/
typedef char TElemType;
typedef struct BiTNode
{TElemType data;BiTNode *lchild, *rchild;
} BiTNode, *BiTree;/* 當前要建立的子樹bt的元素總數(shù)為n,*/
/* 元素在前序序列pre的起始位置為ps,*/
/* 元素在中序序列ino的起始位置為is */
void BuildBiTree(BiTree &bt, int ps, char *pre,int is, char *ino, int n)
{ int i,in1,count = 0;if(n < 1)return; bt = (BiTree)malloc(sizeof(BiTNode));bt->data = pre[ps];bt->lchild = NULL;bt->rchild = NULL;//找出中序序列的中點for(i = is;ino[i] != pre[ps];++i)++count;in1 = i;BuildBiTree(bt->lchild,ps+1,pre,is,ino,count);BuildBiTree(bt->rchild,ps+count+1,pre,in1+1,ino,n-1-count);
}
總結
以上是生活随笔為你收集整理的东北大学计算机专业(专业硕士)研究生入学考试2009真题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rtsp基本信令
- 下一篇: 交流与共享:Visio 2007和Pro