西南大学数据结构课程设计代码Word格式文档下载.docx

上传人:b****6 文档编号:19118335 上传时间:2023-01-03 格式:DOCX 页数:18 大小:19.90KB
下载 相关 举报
西南大学数据结构课程设计代码Word格式文档下载.docx_第1页
第1页 / 共18页
西南大学数据结构课程设计代码Word格式文档下载.docx_第2页
第2页 / 共18页
西南大学数据结构课程设计代码Word格式文档下载.docx_第3页
第3页 / 共18页
西南大学数据结构课程设计代码Word格式文档下载.docx_第4页
第4页 / 共18页
西南大学数据结构课程设计代码Word格式文档下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

西南大学数据结构课程设计代码Word格式文档下载.docx

《西南大学数据结构课程设计代码Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西南大学数据结构课程设计代码Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。

西南大学数据结构课程设计代码Word格式文档下载.docx

='

\0'

;

p++){

//统计各种字符的个数

if(*p>

A'

&

*p<

Z'

){

k=*p-64;

temp[k]++;

a'

z'

k=*p-96;

0'

9'

k=*p-47;

//printf("

%c"

*s);

\n"

);

j=0;

i=1;

//str[0]='

1'

%s"

s);

if(*s>

*s<

for(i=1,j=0;

if(temp[i]!

=0){

j++;

//j保存字符的个数

str[j]=i+64;

//送对应的字母到数组str[]中

cnt[j]=temp[i];

//存入对应字母的权值到数组cnt[]中

%c,权值=%d\n"

str[j],cnt[j]);

str[j]=i+47;

}}}

str[j]=i+96;

}}}

returnj;

voidChuffmanTree(HuffmanTreeHT,HuffmanCodeHC,intcnt[],charstr[]){

//构造哈夫曼树

inti,s1,s2;

=2*num-1;

//初始化HT

HT[i].lchild=0;

HT[i].rchild=0;

HT[i].parent=0;

HT[i].weight=0;

=num;

//输入num个叶节点的权值

HT[i].weight=cnt[i];

for(i=num+1;

//在HT{1....i-1]中选择parent为0且权值最小的两个根节点

//其序号分别为s1和s2,并依次生成新节点

select(HT,i-1,s1,s2);

HT[s1].parent=i;

HT[s2].parent=i;

HT[i].lchild=s1;

HT[i].rchild=s2;

HT[i].weight=HT[s1].weight+HT[s2].weight;

//输入字符集中的字符

HC[i].ch=str[i];

printf("

\n\n"

while(i<

=num){

字符%c,次数为:

%d\n"

HC[i].ch,cnt[i++]);

typedefstruct{

charch;

//待编码的字符

charbits[9];

//存放编码位串(为什么大小设置为9?

intlen;

//编码长度

}CodeNode;

typedefCodeNodeHuffmanCode[n+1];

//待编码的n-1个字符

intweight;

//权值

intlchild,rchild,parent;

//左右孩子及双亲指针

}HTNode;

//树中节点类型

typedefHTNodeHuffmanTree[m+1];

//0号单元不用(共有m个节点,在哈夫曼编码时新生成的节点也对需要编码的字符产生影响)

intnum;

//num定义为全局变量,用来存储待编码的字符个数

voidHuffmanEncoding(HuffmanTreeHT,HuffmanCodeHC){

//根据哈夫曼树HT求哈弗曼编码表HC

intc,p,i;

//c和p分别指示T中孩子和双亲的位置

charcd[n];

//临时存放编码串

intstart;

//指示编码在cd中的起始位置

cd[num]='

//最后一位放上串结束符

start=num;

//初始位置

c=i;

//从叶子节点T[i]开始上溯

p=HT[c].parent;

while((p=HT[c].parent)>

0){

//直至上溯到HT[c]是树根为止

//若T[c]是T[p]的左孩子,则生成0,否则生成代码1

cd[--start]=(HT[p].lchild==c)?

'

:

c=p;

strcpy(HC[i].bits,&

cd[start]);

HC[i].len=num-start;

%c:

%s\n"

HC[i].ch,HC[i].bits);

voidcoding(HuffmanCodeHC,char*str){

//对str所代表的字符串进行编码,并写入文件

FILE*fp;

fp=fopen("

codefile.txt"

"

w"

\n\n输入的字符文件编码为:

while(*str){

if(HC[i].ch==*str){

for(j=0;

j

fputc(HC[i].bits[j],fp);

HC[i].bits[j]);

●"

break;

str++;

fclose(fp);

char*decode(HuffmanCodeHC){

//代码文件codefile.txt的译码

charstr[254];

//假设原文本文件不超过254个字符

staticcharcd[n+1];

inti,j,k=0,cjs;

r"

while(!

feof(fp)){

cjs=0;

for(i=0;

i

cd[i]='

'

cd[i+1]='

cd[i]=fgetc(fp);

for(j=1;

j<

j++){

if(strcmp(HC[j].bits,cd)==0){

str[k]=HC[j].ch;

k++;

cjs=1;

str[k]='

p=str;

returnp;

voidmain(){

charst[254],*s,str[27];

inti;

intcn[27];

HuffmanTreeHT;

HuffmanCodeHC;

输入需要编码的字符串(假设均为大写字母或者均为数字):

gets(st);

//将字符串存入到st[]里面

st[i]!

//if(st[i]<

||st[i]>

//printf("

请保证输入的字符都是大写字母!

//exit(0);

//}else{

num=jsq(st,cn,str);

//统计字符的种类以及各字符出现的频率

//}

ChuffmanTree(HT,HC,cn,str);

//建立哈夫曼树

\n\n字符对应的哈夫曼编码为:

HuffmanEncoding(HT,HC);

coding(HC,st);

//建立电文哈弗曼编码文件

s=decode(HC);

//读编码文件译码

\n\n译码后的字符串:

%s\n\n"

//输出译码后的字符串

 

Dijkstra算法应用交通咨询系统

#include"

stdafx.h"

#include<

stdio.h>

string.h>

#defineMVNum50

#defineDij_MAXN33

#defineMAX_VERTEX_NUM31

#defineMAX_STRING_NUM10

#defineMAX_TRAFFIC_NUM10

typedefstructTrafficNode

{

charname[MAX_STRING_NUM];

intTime;

//

intEndCity//火车到达城市的编号

intCost;

//票价

}TrafficNodeDat;

typedefstructVNode

CityTypecity;

//城市编号

intTrainNum;

//标记下面Train数组里元素个数

TrafficNodeDatTrain[MAX_TRAFFIC_NUM];

//数组成员为结构体,记录了到达城市、起止时间、票价和班次

}VNodeDat;

//班次

intEndCity;

//火车到达城市的编号

//票价

intFlightNum;

//标记下面Train数组和Flight数组里元素个数

TrafficNodeDatFlight[MAX_TRAFFIC_NUM];

intmain()

switch(Command)

{

case0:

return0;

case1:

Administrators();

//管理员操作界面函数

break;

case2:

User();

//用户操作界面函数

default:

cout<

<

"

\t选择序号错误!

请重新选择!

intInitSystem()

voidUser()

voidAdministrators()

intDelCity(char*Name)//删除城市

{

//删除城市

intcity,i,j;

city=SeekCity(Name);

for(i=city;

CityNum-1;

i++)

{

strcpy(CityName[i],CityName[i+1]);

AdjList[i].FlightNum=AdjList[i+1].FlightNum;

AdjList[i].TrainNum=AdjList[i+1].TrainNum;

for(j=0;

AdjList[i].FlightNum;

j++)

{

AdjList[i].Flight[j].Cost=AdjList[i+1].Flight[j].Cost;

AdjList[i].Flight[j].EndCity=AdjList[i+1].Flight[j].EndCity;

strcpy(AdjList[i].Flight[j].name,AdjList[i+1].Flight[j].name);

AdjList[i].Flight[j].Time=AdjList[i+1].Flight[j].Time;

}

CityNum--;

return1;

intDelPath(char*name)//删除路线

//删除路线

inti,j,flag=0;

CityNum;

if(strcmp(AdjList[i].Flight[j].name,name)==0)

{flag=1;

break;

}//找到要删除的路线,找到跳出for循环

if(flag)

{

for(;

AdjList[i].FlightNum-1;

{

AdjList[i].Flight[j].Cost=AdjList[i].Flight[j+1].Cost;

AdjList[i].Flight[j].EndCity=AdjList[i].Flight[j+1].EndCity;

strcpy(AdjList[i].Flight[j].name,AdjList[i].Flight[j+1].name);

AdjList[i].Flight[j].Time=AdjList[i].Flight[j+1].Time;

}

AdjList[i].FlightNum--;

//将要删除路线后面的路线全部向前移,并将总数减1

break;

}

for(j=0;

AdjList[i].TrainNum;

if(strcmp(AdjList[i].Train[j].name,name)==0)

flag=1;

break;

if(flag)

for(;

AdjList[i].TrainNum-1;

AdjList[i].Train[j].Cost=AdjList[i].Train[j+1].Cost;

AdjList[i].Train[j].EndCity=AdjList[i].Train[j+1].EndCity;

strcpy(AdjList[i].Train[j].name,AdjList[i].Train[j+1].name);

AdjList[i].Train[j].Time=AdjList[i].Train[j+1].Time;

}

AdjList[i].TrainNum--;

}

}return1;

intInsertCity(char*Name)//添加某个城市

//添加城市

strcpy(CityName[CityNum],Name);

AdjList[CityNum].city=CityNum;

//设置城市编号

AdjList[CityNum].FlightNum=0;

AdjList[CityNum].TrainNum=0;

//新增城市火车数和飞机数初始为零

CityNum++;

//城市总数加1

intInsertFlight(char*flight,char*StartCity,char*EndCity,intTime,intcost)//添加某架航班

//添加飞机路线

i=SeekCity(StartCity);

j=SeekCity(EndCity);

AdjList[i].Flight[AdjList[i].FlightNum].Cost=cost;

AdjList[i].Flight[AdjList[i].FlightNum].EndCity=j;

AdjList[i].Flight[AdjList[i].FlightNum].Time=Time;

strcpy(AdjList[i].Flight[AdjList[i].FlightNum].name,flight);

AdjList[i].FlightNum++;

intInsertTrain(char*train,char*StartCity,char*EndCity,intTime,intcost)//添加某次列车

//添加火车路线

AdjList[i].Train[AdjList[i].TrainNum].Cost=cost;

AdjList[i].Train[AdjList[i].TrainNum].EndCity=j;

AdjList[i].Train[AdjList[i].TrainNum].Time=Time;

strcpy(AdjList[i].Train[AdjList[i].TrainNum].name,train);

AdjList[i].TrainNum++;

voidDijkstra(ints[30][30],intp_start,intp_end,intTravelType)

intPreCity[30];

inti,j,min,pre,pos;

for(i=0;

i++)PreCity[i]=-1;

PreCity[p_start]=-2;

while(PreCity[p_end]==-1)

min=-1;

for(i=0;

if(PreCity[i]!

=-1)//i为起始站

{

for(j=0;

if(PreCity[j]==-1&

s[i][j]>

0&

(min<

0||s[i][j]<

min))

{

pre=i;

pos=j;

//j为起始站中花费最小的到达站的城市编号

min=s[i][j];

}

}

PreCity[pos]=pre;

Dijkstra_Output(s,PreCity,p_end,TravelType);

intCalcMinCost(intStartCity,intEndCity,intTravelType)

//查询最小耗费路线

ints[30][30];

inti,j,min,end,flag1,flag2;

flag1=0;

flag2=0;

for(j=0;

s[i][j]=-1;

//设空路径

if(TravelType==0)//判断初始城市和终点城市是否在火车交通路线中

for(i=0;

{

if(AdjList[i].Train[j].EndCity==StartCity)flag1=1;

if(AdjList[i].Train[j].EndCity==EndCity)flag2=1;

}

elseif(TravelType==1)//判断初始和终点城市是否在飞机交通路线中

for(i=0;

for(j=0;

{

if(AdjList[i].Flight[j].EndCity==StartCity)flag1=1;

if(AdjList[i].Flight[j].EndCity==EndCity)flag2=1;

}

if(flag1!

=1&

flag2!

=1)

{printf("

\n\t抱歉!

没有您要查找的路线!

return0;

if(TravelType==0)

for(i=0;

City

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1