Tải bản đầy đủ (.doc) (5 trang)

Bài tập cấu trúc dữ liệu và giải thuật: bài số 1

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (82.33 KB, 5 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CNTT
ĐỀ THI MÔN CẤU TRÚC DỮ LIỆU
Thời gian 90 phút
Câu 1: (4 điểm)
(i) Viết chương trình đổi số thập phân thành số nhị phân dùng ngăn xếp
(cài đặt bằng danh sách liên kết đơn)
(ii) Viết chương trình thêm một phần tử vào một danh sách liên kết đơn
đã có thứ tự.
Câu 2: (3 điểm)
Viết chương trình tính tổng giá trị các node của một cây nhị phân.
Câu 3: (3 điễm)
Viết chương trình duyệt cây theo mức: (từ mức nhỏ đến mức lớn, từ trái
sang phải)
Vi dụ:
Kết quả:
11 ; 2 14; 1 7 15 ; 5 8 ; 4
1
ĐÁP ÁN
Câu 1:
(i)
/*
Dung ngan xep de doi 1 so thap phan sang thanh 1 so nhi phan
*/
#include<stdio.h>
#include<conio.h>
typedef int Data;
typedef struct NODE
{
Data Info;
NODE *pNext;


};
typedef NODE *PNODE;
PNODE GetNode(Data x);
int IsEmpty(PNODE S);
void Push(Data x, PNODE &S);
void RemoveNode(PNODE &S);
int Pop(Data &x, PNODE &S);
void main()
{
PNODE S=NULL;
unsigned int N;
int sodu;
clrscr();
printf("Nhap so nguyen duong: ");
scanf("%d",&N);
do
{
sodu=N%2;
Push(sodu,S);
}while (N/=2);
printf("\nSo nhi phan: ");
while(Pop(sodu,S)!=0)
printf("%d",sodu);
getch();
}
PNODE GetNode(Data x)
{
PNODE p=new NODE;
p->Info=x;
p->pNext=NULL;

2
return p;
}
int IsEmpty(PNODE S)
{
return(S==NULL?0:1);
}
void Push(Data x, PNODE &S)
{
PNODE p=GetNode(x);
if(IsEmpty(S)==0)
S=p;
else
{
p->pNext=S;
S=p;
}
}
void RemoveNode(PNODE &S)
{
PNODE p;
if(S==NULL)
return;
p=S;
S=S->pNext;
delete p;
}
int Pop(Data &x, PNODE &S)
{
if(IsEmpty(S)==0)

return 0;
else
{
x=S->Info;
RemoveNode(S);
}
return 1;
}
(ii)
Giả sử danh sách liên kết tăng dần
void Insert(LIST &l, Data x)
{
NODE *newNode=GetNode(x);
NODE *p;
if(newNode==NULL)
printf("Khong du bo nho");
if(l.pHead=NULL)
3
{
l.pHead=l.pTail=newNode;
}
else
{
p=l.pHead;
while (p->Info<x)
{
q=p;
p=p->pNext;
}
newNode->pNext=q->pNext;

q->pNext=newNode;
if(q==l.pTail)
l.pTail=newNode;
}
}
Câu 2
int Tong(Treetype T)
{
if(T)
return T->Data + Tong(T->pLeft)+Tong(T->pRight);
return 0;
}
Câu 3
typedef int Data;
typedef struct tagTNODE
{
Data Key;
struct tagTNODE* pLeft;
struct tagTNODE* pRight;
}TNODE;
typedef TNODE *TREE;
typedef struct tagNODE
{
TNODE* id;
struct tagNODE* pNext;
}NODE;
NODE *pHead,*pTail;
void Init()
{
pHead=pTail=NULL;

}
4
void Push(TREE r)
{
NODE *f=new NODE;
f->id=r;
f->pNext=NULL;
if(pTail)
pTail->pNext=f;
pTail=f;
if(!pHead)
pHead=f;
}
void Pop(TREE &r)
{
NODE *f;
r=pHead->id;
f=pHead;
pHead=pHead->pNext;
if (pHead==NULL)
pTail=NULL;
delete f;
}
void Duyettheomuc(TREE T)
{
TNODE *p;
Init();
if(T)
Push(T);
while (pHead)

{
Pop(p);
printf("%3d",p->Key);
if(p->pLeft) Push(p->pLeft);
if(p->pRight) Push(p->pRight);
}
}
5

×