博文

图基本操作的实现(2006-12-20 23:22:00)

摘要:                               图基本操作的实现 一、【实验内容】
【问题描述】
(1)、选择邻接表作为无向图的存储结构,设计一个程序实现图的基本操作(包括输出、广度遍历、深度遍历)
(2)、选择邻接矩阵作为无向图的存储结构,分别设计用prim求最小生成树和用克鲁斯卡尔求最小生成树的算法。 【基本要求】:
程序的菜单功能项如下:
1、 初始化(图的邻接表存储为空)//可以不要该选项
2、 图邻接表的建立              //针对的图为不带权图
3、 深度优先遍历                //针对的存储结构是2所建立起来的邻接表
4、 广度优先遍历                //针对的存储结构是2所建立起来的邻接表
5、 最小生成树(prim/克鲁斯卡尔)//该项操作要先建立带权图的邻接矩阵,然后才应用prim方法
6、 退出                二、实验目的
1. 掌握图的各种存储结构,特别要熟练掌握邻接矩阵和邻接表存储结构。
2. 遍历是图各种应用的算法的基础,要熟练掌握图的深度优先遍历和广度优先遍历算法,复习栈和队列的应用。
3. 复习类的操作和多文件的实......

阅读全文(1899) | 评论:0

哈夫曼编码/译码(2006-12-04 00:37:00)

摘要:                                   哈夫曼编码/译码 一、【实验内容】
【问题描述】
      利用哈夫曼编码进行住处通讯可以大大提高信道利用率,缩短住处传输时间,降低成本,但是,这要求在发送端通过一个编码系统将传输的数据预先编码,在接收端通过一个译码系统对传来的数据进行译码(复原),对于双向传输信息的信道,每端都一个完整的编码译码系统,试为这样的住处收发站写一个哈夫曼友的编码译码系统. 【基本要求】:一个完整的系统应以下功能:
(1) I. 初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存放在文件hfmTree中.
(2) E. 编码(Encoding)。利用已建立好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果代码存(传输)到文件CodeFile中.
(3) D. 译码(Decoding)。利用已建好的哈夫曼树,对传输到达的CodeFile中的数据代码进行译码,将译码结果存入文件TextFile中.
(4) P. 印文件代码(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。
(5) T. 印哈夫曼树(TreePrinting)。将已在内存中的哈夫曼树以直观的方式(树或凹入表的形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
      
测试数据:
(1) 利用教科书例6-2中的数据调试程序。
(2) 用下表给出的字符集和频度的计数据建立哈曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”.。......

阅读全文(3072) | 评论:6

迷宫问题求解(C++非递归程序)(2006-12-10 13:34:00)

摘要:              
一、【实验内容】
【问题描述】
      以一个m*n的长方阵表示迷宫,0,1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论, 【基本要求】:首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归的程序,求得的通路以三元组(I,j,d)的形式输出,其中(i,j)指示迷宫中的一个坐标,d表示做到下一个坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(1,1,1),(1,2,2),(2,2,2),
(3,2,3),(3,1,2),……。
   迷宫数据从文件中读取出来。
      
【测试数据】:
迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口
  1       2       3       4       5       6       7       8 进0 0 0 1 0 0 1 0
    0 0 1 0 0 0 1 0
    0 0 0 0 1 1 0 1
    0 1 1 1 ......

阅读全文(3585) | 评论:3

迷宫问题求解(C++递归程序)(2006-11-19 11:26:00)

摘要:#include<iostream>
#include<fstream>
using namespace std;
struct Move
{
 int x;
 int y;
}move[4]={{0,1},{1,0},{0,-1},{-1,0}}; bool Mazepath(int **maze,int x,int y,int m,int n);
void Restore(int **maze,int m,int n);        //恢复路径
int** GetMaze(int &m,int &n); int main()
{
 int m=0,n=0;
 int **maze; 
 maze=GetMaze(m,n);
 if(Mazepath(maze,m,n,1,1))
 cout<<"("<<m<<','<<n<<')'<<endl;
 else cout<<"No path!\n";
 return 0;
}
int** GetMaze(int &m,int &n)
                //获取迷宫(可从文件中读取,也可输入)
    //返回存取迷宫的二维指针
{
 int **maze;              //定义二维指针存取迷宫
 int i=0,j=0;
 char Choose;   &......

阅读全文(2212) | 评论:1

任意长整数加法运算(C++)(2006-11-07 01:01:00)

摘要:
              任意长整数加法运算(C++)
一、【实验内容】
【问题描述】
      设计一个实现任意长的整数进行加法运算的演示程序 【基本要求】:利用双向循环链表实现长整数的存储,每个结点含一个整形变量。任何整形变量的范围是 -(215 - 1)~(215 - 1)。输入和输出形式:按中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。
      
【测试数据】:
(1)0;0;应输出“0”。
(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”。
(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。
(4)1,0001,0001;-1,0001,0001;应输出“0”。
(5)1,0001,0001;-1,0001,0000;应输出“1”。
(6)-9999,9999,9999;-9999,9999,9999;应输出“1,9999,9999,9998”。
(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。
二、实验目的
1、熟悉掌握双向循环链表的基本操作;
2、熟悉任意长字符串的输入,并实现把字符串转化为整数;
3、熟悉任意长整数的加法运算;
4、更进一步掌握有关类的操作   三、实验文档:
                  长整数加法运算
一、需求分析
1、本程序实现计算任意长的整数的加法运算. 以用户和计算机对话的方式,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,然后程序就计算并显示出这两个数的运算。
2、本演示程序中,集合的元素限定为数字字符[‘0’~’9’]和字符‘,’与‘;’,......

阅读全文(2819) | 评论:0

学生同学录管理系统(2006-10-22 16:43:00)

摘要:[问题描述] 实现学生通讯录管理的几个操作功能(新建、插入、删除、从文件中读取、写入文件和查询、屏幕输出等功能)。通讯录中学生的信息有学号、姓名、出生日期、性别、电话和地址等。 [内容] 1、利用链式存储结构来实现 2、系统的菜单功能项如下: 1----新建学生通讯录 2----向学生通讯录插入学生信息 3----在通讯录删除学生信息 4----在文件中读取通讯录信息 5----向文件中写入学生通讯录信息 6----在通讯录中查询学生信息 7----在屏幕中输出全部学生信息 8----退出 代码如下: //通讯录.h #include<iostream> #include<fstream> #include<string> #include<iomanip> using namespace std; struct DataType                              //定义所有信息 {     char number[20];              //学号     char name[20];                //姓名     char birthday[20];            //生日     char sex[6];&nbs......

阅读全文(4050) | 评论:1

学生成绩管理系统(2006-09-21 13:49:00)

摘要:                   学生成绩管理系统 (1)按顺序输入若干个学生信息 (2)插入一个学生信息(先输入插入位置,再输入学生信息) (3)删除一个学生信息(先删除插入位置,再删除学生信息) (4)修改已知学号的学生信息(按学号来找) (5)查找已知学号的学生信息(按姓名来找) (6)统计一个学生的总分成绩 (7)按总分从高到低输出学生成绩表 (8)显示所有学生的信息 (9)退出。 代码如下: #include<iostream>
#include<string>
#include<iomanip>
using namespace std;
struct student
{
 char name[15];
 int number;
 float chinese,math,English;
};
student s[50];
int i=0,n=0;
double allscore[50];
void insert();
void delete1();
void find();
void xiugai();
void tongji();
void sort();
void input();
void output();
void contin()

 cout<<"是否继续操作(y/n)";
 char a; int j;
 cin>>a;
 while(a!='y'&&a!='n')
  cin>>a;
 if(a=='y')
 {
  cout<<"你想继续做什么:";
  cin>>j;
......

阅读全文(4419) | 评论:2

C语言-数据结构-二叉排序树与平衡树算法实现及演示(转)(2006-05-11 16:55:00)

摘要:这个程序是我学数据结构时候,老师说让我做个演示程序时候做的一个最初版本程序。当然这不是教给老师的演示程序版本,演示版本的算法是套用书上的,这版本算法是我自己写的,所以我不能保证它没BUG(PS:在删除平衡树节点时候,由于我采用不同于书上的删除策略,所以后面演示程序可能不会象想象中那样旋转)。下面我给出程序中主要的算法及功能模块函数概要说明,最后附上源代码。 算法1:平衡树创建
说明:1,输入数列以整数零结束;2,平衡树HEAD初始化为空树
(1) 从输入数列接收一个DATA
(2) IF DATA!=0 THEN DATA转化成NODE
ELSE 返回
(3) 将NODE插入平衡树HEAD中
(4) 转到(1)继续实行 算法2:平衡树中插入的实现
说明:作左旋转和作右旋转的同时,相关节点的BF均置0。
(1)从调用函数中接收一个节点NODE
(2)IF HEAD=NULL THEN 将NODE节点直接插入平衡树HEAD
转到(6);
(3)IF HEAD>NODE
THEN 将NODE节点插入HEAD->LCHILD平衡树
转到(4);
ELSE IF HEAD<NODE
THEN 将NODE节点插入HEAD->RCHILD平衡树
转到(4);
ELSE 转到(6)
(4) 计算HEAD根节点平衡因子BF0
(5) IF –2<BF0<2 THEN 转到(6)
ELSE IF HEAD根节点BF==2
THEN IF HEAD左子树根节点BF==1 THEN 右旋转
ELSE (说明左子树根节点BF==-1)
做先左后右旋转,修改相关节点BF;
ELSE IF HEAD根节点BF==-2
THEN IF HEAD右子树根节点BF==-1 THEN 左旋转
ELSE (说明右子树根节点BF==1)
作先右后左旋转,修改相关节点BF
(6)返回
功能模块概要说明:
1,创建二叉排序树 Insert(BNODE **head),InitBST(int *p)
2,打印二叉排序数 Pr......

阅读全文(5289) | 评论:0