《数据结构》
实 验 指 导 书
湖南工业大学计算机与通信学院
二00九年三月
目 录
实验一 抽象数据类型实现方法……………………………………………2 实验二 线性表的基本操作……………………………………2 实验三 实验四 实验五 实验六 实验七 实验八
附录一:实验报告要求……………………………………………附录二:实验考核办法……………………………………………
栈和队列的基本操作…………………………………3 数组的基本操作(选做)………………………………9 树的基本操作…………………………………………10 图的基本操作…………………………………………13 查找的基本操作………………………………………16 排序的基本操作………………………………………18 32 32
1
实验一 抽象数据类型实现方法
一、 实验目的
1. 了解数据的逻辑结构和数据的存储结构之间的区别与联系; 2. 熟悉抽象数据类型的表示和实现方法; 3. 掌握运用C语言上机调试程序的基本方法。
二、 实验内容及要求
1. 设计一个可进行复数运算的演示程序。
2. 实现以下六种基本运算:1)由输入的实部和虚部生成一个复数;2)两个复数求和;3)两个复数求差;4)两个复数求积;5)从已知复数中分离出实部;6)从已知复数中分离出虚部。运算结果以相应的复数或实数的表示形式显示。
三、 实验步骤
在微型计算机上调试编写的程序,记录运行结果。
四、 参考程序
#include
double real; double img; }ComplexNumber;
void CreateComplexNumber(ComplexNumber *c,double a,double b) {
c->real = a; c->img = b; return; }
void AddComplexNumber(ComplexNumber *c,ComplexNumber c1,ComplexNumber c2) {
c->real = c1.real+c2.real; c->img = c1.img+c2.img; return; }
void SubComplexNumber(ComplexNumber *c,ComplexNumber c1,ComplexNumber c2) {
c->real = c1.real-c2.real; c->img = c1.img-c2.img; return; }
2
void MultiComplexNumber(ComplexNumber *c,ComplexNumber c1,ComplexNumber c2) {
c->real = c1.real*c2.real-c1.img*c2.img; c->img = c1.real*c2.img+c1.img*c2.real; return; }
void ConComplexNumber(ComplexNumber *c,ComplexNumber c1) {
c->real = c1.real; c->img = c1.img*(-1); return; }
void DisplayComplexNumber(double c1,double c2) {
if((int)c1 == 0 && (int)c2 == 0) printf(\运算结果为:0\\n\ if((int)c1 == 0 && (int)c2 != 0) printf(\运算结果为:i%g\\n\ if((int)c1 != 0 && (int)c2 == 0) printf(\运算结果为:%g\\n\ if((int)c1 != 0 && (int)c2!=0)
printf(\运算结果为:%g i%g\\n\}
int main() {
int choice;
double a1 ,b1,a2,b2;
ComplexNumber *c1,*c2,*result;
c1 = (ComplexNumber *)malloc(sizeof(ComplexNumber)); c2 = (ComplexNumber *)malloc(sizeof(ComplexNumber)); result = (ComplexNumber *)malloc(sizeof(ComplexNumber)); printf(\生成一个复数(实部与虚部由你输入)\\t\\n\ printf(\求2个复数的和\\t\\n\ printf(\求2个复数的差\\t\\n\ printf(\求2个复数的积\\t\\n\ printf(\求共轭复数\\t\\n\ printf(\退出程序\\t\\n\\n\
printf(\请输入你要让计算机所做运算的代号!\\t\\n\ while(scanf(\ {
if(choice==0)break;
3
switch(choice) {
case 1: goto A;break; case 2: goto B;break; case 3: goto C;break; case 4: goto D;break; }
A:{
printf(\请输入实部和虚部\\n\ scanf(\
CreateComplexNumber( c1,a1,b1);
DisplayComplexNumber(c1->real,c1->img); }
continue; B:{
printf(\请分别输入两个数的实部和虚部\\n\ scanf(\ CreateComplexNumber( c1,a1,b1); CreateComplexNumber( c2,a2,b2); AddComplexNumber(result,*c1,*c2);
DisplayComplexNumber(result->real,result->img); }
continue; C:{
printf(\请分别输入两个数的实部和虚部\\n\ scanf(\ CreateComplexNumber( c1,a1,b1); CreateComplexNumber( c2,a2,b2); SubComplexNumber(result,*c1,*c2);
DisplayComplexNumber(result->real,result->img); }
continue;
D:{
printf(\请分别输入两个数的实部和虚部\\n\ scanf(\ CreateComplexNumber( c1,a1,b1); CreateComplexNumber( c2,a2,b2); MultiComplexNumber(result,*c1,*c2);
DisplayComplexNumber(result->real,result->img); }
continue; E:{
4