日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构课程设计

發(fā)布時間:2023/12/9 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构课程设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項目1:中國計算機設(shè)計大賽賽事統(tǒng)計

一、問題及要求

【問題描述】

?參加計算機設(shè)計大賽的n個學(xué)校編號為1~n,賽事分成m個項目,項目的編號為1~m.比賽獲獎按照得分降序,取前三名,寫一個統(tǒng)計程序產(chǎn)生各種成績單和得分報表。

【基本要求】

1)每個比賽項目至少有10支參賽隊;每個學(xué)校最多有6支隊伍參賽;

2)能統(tǒng)計各學(xué)校的總分;

3)可以按照學(xué)校編號或名稱,學(xué)校的總分、各項目的總分排序輸出;

4)可以按學(xué)校編號查詢學(xué)校某個項目的獲獎情況;可以按項目編號查詢?nèi)〉们叭膶W(xué)校;

5)數(shù)據(jù)存入文件并能隨時查詢

【設(shè)計要求】

1)輸入數(shù)據(jù)形式和范圍:可以輸入學(xué)校的名稱,賽事項目的名稱。

2)輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整數(shù)

3)界面要求:交互設(shè)計要合理,每個功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)功能的要求。

4)存儲結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計,但是賽事相關(guān)數(shù)據(jù)要存儲在文件中。

【測試數(shù)據(jù)】?

要求使用全部合法數(shù)據(jù),整體非法數(shù)據(jù),局部非法數(shù)據(jù)。進行程序測試,以保證程序的穩(wěn)定。

【實現(xiàn)提示】?

假設(shè)3<賽事項目數(shù)量<=10,學(xué)校名稱長度不超過20個字符。每個賽事結(jié)束時,將其編號、名稱輸入,并依次輸入?yún)①悓W(xué)校編號、學(xué)校名稱和成績。

二、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計

初步思考

1)從交互性來看,為了更好的參與感,我首先編寫了一個菜單欄,使用者可以通過鍵入選擇想要進行的操作。一開始本來想要使用列表和數(shù)組來寫,但是貌似有些不兼容,并且二者對應(yīng)起來十分的麻煩,我的朋友向我推薦了C++里面的結(jié)構(gòu)體,但是對我而言還是Java更加的熟悉,奈何Java的結(jié)構(gòu)體不是很了解,故先擱置。

2)我慢慢的搞清楚了一些Java的結(jié)構(gòu)體的用法,值得注意的是使用的時候要創(chuàng)建對象。然后就有一個新的問題出現(xiàn),那就是應(yīng)該怎么定義?或者說定義幾個結(jié)構(gòu)體。如果我以項目為基本單位,以"項目編號,項目名稱,參加項目的學(xué)校的編號,參加項目學(xué)校的名稱,該學(xué)校取得的分?jǐn)?shù)"這樣寫,那么單項目總分和學(xué)校排名以及取前三名將會變得非常簡單,但是這樣的話我就需要思考的是學(xué)校總分如何去計算。

數(shù)據(jù)結(jié)構(gòu)的選擇

賽事統(tǒng)計系統(tǒng),選擇數(shù)據(jù)結(jié)構(gòu)里的樹的結(jié)構(gòu)來解決

概要設(shè)計

流程圖

?

、詳細(xì)設(shè)計和編碼

import java.util.*;

public class test {

static int m;

//項目數(shù)

static int n;

//學(xué)校數(shù)

static Project[] project = new Project[10];

//項目

static School[] school = new School[10];

//學(xué)校

static class Project {

int projectCode;

//項目編碼

String projectName;

//項目名稱

int teamnum;

//參賽隊伍數(shù)量

int[] jointeam = new int[10];

//參賽隊伍編號

int[] score = new int[10];

//參賽隊伍成績

}

static class School {

int schoolCode;

//學(xué)校編碼

String schoolName;

//學(xué)校名稱

int sum;

//項目總分

}

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

System.out.println("請輸入項目的數(shù)目:");

m = sc.nextInt();

if (m <= 0) {

System.out.println("輸入有誤!");

System.exit(0);

}

System.out.println("請輸入學(xué)校的數(shù)目:");

n = sc.nextInt();

if (n <= 0) {

System.out.println("輸入有誤!");

System.exit(0);

}

while (true) {

System.out.println("**********************");

System.out.println("歡迎使用賽事統(tǒng)計查詢系統(tǒng)");

System.out.println("1.添加信息");

System.out.println("2.按學(xué)校編號排序輸出");

System.out.println("3.按項目總分排序輸出");

System.out.println("4.按學(xué)校編號查詢學(xué)校某個項目的獲獎情況");

System.out.println("5.按項目編號查詢?nèi)〉们叭膶W(xué)校");

System.out.println("0.退出");

System.out.println("**********************");

System.out.println("請輸入你的選擇:");

String nothing = sc.nextLine(); //防止空格

int option = sc.nextInt();

if (option != 0 && option != 1 && option != 2 && option != 3 && option != 4 && option != 5) {

System.out.println("輸入有誤!");

System.exit(0);

}

switch (option) {

case 1:

addInformation();

break;

case 2:

printByCodes();

break;

case 3:

printByScore();

break;

case 4:

findByCodes();

break;

case 5:

getTopThree();

break;

case 0:

System.out.println("謝謝使用");

System.exit(0);

}

}

}

public static void addInformation() {

//錄入信息

//錄入項目

Scanner sc = new Scanner(System.in);

for (int i = 0; i < m; i++) {

project[i] = new Project();

project[i].projectCode = i + 1;

System.out.println("請輸入第" + (i + 1) + "個項目的名稱:");

project[i].projectName = sc.nextLine();

System.out.println("添加成功!");

}

for (int i = 0; i < m; i++) {

System.out.println("項目編號" + project[i].projectCode +

"項目名稱" + project[i].projectName);

}

//錄入學(xué)校

for (int i = 0; i < n; i++) {

school[i] = new School();

school[i].schoolCode = i + 1;

System.out.println("請輸入第" + (i + 1) + "個學(xué)校的名稱:");

school[i].schoolName = sc.nextLine();

System.out.println("添加成功!");

}

for (int i = 0; i < n; i++) {

System.out.println("學(xué)校編號" + school[i].schoolCode +

"學(xué)校名稱" + school[i].schoolName);

}

for (int i = 0; i < m; i++) {

System.out.println("請輸入?yún)⒓?#34; + project[i].projectName + "的學(xué)校數(shù)量:");

project[i].teamnum = sc.nextInt();

System.out.println("請依次輸入?yún)⒓?#34; + project[i].projectName + "的學(xué)校編號:");

for (int j = 0; j < project[i].teamnum; j++) {

project[i].jointeam[j] = sc.nextInt();

System.out.println("輸入成功!");

}

System.out.println("參加項目" + project[i].projectName + "的學(xué)校有");

for (int j = 0; j < project[i].teamnum; j++) {

System.out.println(project[i].jointeam[j] + " ");

}

//錄入分?jǐn)?shù)

System.out.println("請依次輸入?yún)⒓?#34; + project[i].projectName + "的學(xué)校的分?jǐn)?shù)");

for (int j = 0; j < project[i].teamnum; j++) {

int score = sc.nextInt();

if (score >= 0 && score <= 100) {

project[i].score[j] = score;

System.out.println("輸入成功!");

} else {

System.out.println("您輸入的有誤!");

System.exit(0);

}

}

System.out.println("顯示如下:");

for (int j = 0; j < project[i].teamnum; j++) {

System.out.println("編號" + project[i].jointeam[j] + "的學(xué)校取得的成績:" + project[i].score[j]);

}

}

}

public static void printByCodes() {

//按學(xué)校編號排序輸出

int sum = 0;

for (int i = 0; i < n; i++) {

System.out.println("學(xué)校編號:" + school[i].schoolCode);

System.out.println("學(xué)校名稱:" + school[i].schoolName);

for (int j = 0; j < m; j++) {

for (int k = 0; k < project[j].jointeam[k]; k++) {

if (project[j].jointeam[k] == school[i].schoolCode) {

System.out.println("參賽項目:" + project[j].projectName);

System.out.println("取得成績:" + project[j].score[k]);

System.out.println("*****");

sum += project[j].score[k];

}

}

}

System.out.println("學(xué)校取得的總分是:" + sum);

school[i].sum = sum;

sum = 0;

System.out.println("**********************");

}

}

public static void printByScore() {

//按總分排序

int temp = 0;

int[] temps = new int[n];

for (int i = 0; i < n; i++) {

temps[i] = school[i].sum;

}

for (int i = 0; i < n; i++) {

for (int j = i; j < n; j++) {

if (temps[i] > temps[j]) {

temp = temps[i];

temps[i] = temps[j];

temps[j] = temp;

}

}

}

System.out.println("按照總分排序?qū)W校如下:");

for (int i = 0; i < n; i++) {

for (int j = 0; j < n; j++) {

if (temps[i] == school[j].sum) {

System.out.println("總分第" + (n - i) + "名的學(xué)校是" + school[j].schoolName);

System.out.println("其總分是:" + school[j].sum);

System.out.println("*******");

}

}

}

}

public static void findByCodes() {

//按學(xué)校編號查詢學(xué)校某個項目的獲獎情況

Scanner sc = new Scanner(System.in);

System.out.println("請輸入你想要查詢的學(xué)校編號");

int scode = sc.nextInt();

System.out.println("請輸入你想要查詢的項目編號");

int pcode = sc.nextInt();

int[] temps = new int[project[pcode - 1].teamnum];

int len = temps.length;

for (int i = 0; i < len; i++) {

temps[i] = project[pcode - 1].score[i];

}

int temp = 0;

for (int i = 0; i < len; i++) {

for (int j = i; j < len; j++) {

if (temps[i] > temps[j]) {

temp = temps[i];

temps[i] = temps[j];

temps[j] = temp;

}

}

}

for (int i = 0; i < len; i++) {

for (int j = 0; j < len; j++) {

if (project[pcode - 1].score[i] == temps[j]) {

System.out.println("該學(xué)校在該項目中排第" + j + "名");

}

}

}

}

public static void getTopThree() {

//按項目編號查詢?nèi)〉们叭膶W(xué)校

Scanner sc = new Scanner(System.in);

System.out.println("請輸入您想要查詢的項目的編號:");

int code = sc.nextInt();

int[] temps = new int[project[code - 1].teamnum];

int len = temps.length;

for (int i = 0; i < len; i++) {

temps[i] = project[code - 1].score[i];

}

int temp = 0;

for (int i = 0; i < len; i++) {

for (int j = i; j < len; j++) {

if (temps[i] > temps[j]) {

temp = temps[i];

temps[i] = temps[j];

temps[j] = temp;

}

}

}

for (int i = 0; i < len; i++) {

for (int j = 0; j < n; j++) {

if (temps[len - 1] == project[code - 1].score[i]) {

if (school[j].schoolCode == project[code - 1].jointeam[i]) {

System.out.println("第一名的學(xué)校是:" + school[j].schoolName);

}

}

if (temps[len - 2] == project[code - 1].score[i]) {

if (school[j].schoolCode == project[code - 1].jointeam[i]) {

System.out.println("第二名的學(xué)校是:" + school[j].schoolName);

}

}

if (temps[len - 3] == project[code - 1].score[i]) {

if (school[j].schoolCode == project[code - 1].jointeam[i]) {

System.out.println("第三名的學(xué)校是:" + school[j].schoolName);

}

}

}

}

}

}

  • 、用戶使用說明

如上文注釋

項目2:校園導(dǎo)游咨詢

一、問題及要求

【問題描述】?

設(shè)計一個校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。

基本要求】

1)設(shè)計你所在學(xué)校的校園平面圖,所含景點不少于10個.以圖中頂點表示校內(nèi)各景點,存放景點名稱、代號、簡介??等信息;以邊表示路徑,存放路徑長度等相關(guān)信息。

2)為來訪客人提供圖中任意景點相關(guān)信息的查詢。

3)為來訪客人提供圖中任意景點的問路查詢,即查詢?nèi)我鈨蓚€景點之間的一條最短的簡單路徑。

【測試數(shù)據(jù)】?

以江蘇科技大學(xué)長山校區(qū)為例。

【實現(xiàn)提示】?

一般情況下,校園的道路是雙向通行的,可設(shè)校園平面圖是一個無向網(wǎng).頂點和邊均含有相關(guān)信息.

二、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計

數(shù)據(jù)結(jié)構(gòu)的選擇

校園導(dǎo)游系統(tǒng),選擇數(shù)據(jù)結(jié)構(gòu)里的圖的結(jié)構(gòu)來解決

概要設(shè)計

?

?

  • 行政樓 2.計算機學(xué)院樓 3.圖書館
    4.文理大樓 5.東苑食堂 6.明德樓
    7.西操場 8.文體中心 9.東操場
    10.篤學(xué)樓 11.西苑食堂 12.48棟學(xué)生宿舍
    13.校醫(yī)院
    • 詳細(xì)設(shè)計和編碼

    #include<stdio.h>

    #include<stdlib.h>

    #include<string.h>

    #include<algorithm>

    #define inf 99999999

    using namespace std;

    void kaishidaohang();

    void daohanglan();

    int map[110][110], book[110], dis[110];

    struct A //定義結(jié)構(gòu)體存儲景點信息

    {

    char name[100];

    char jieshao[800];

    }q[100];

    void cuntu() //存儲景點信息、同時存圖,各邊信息

    {

    int i, j;

    strcpy(q[1].name, "學(xué)校大門"); strcpy(q[1].jieshao, "設(shè)有公交站");

    strcpy(q[2].name, "體育館"); strcpy(q[2].jieshao, "設(shè)有室內(nèi)乒乓球、室內(nèi)羽毛球、室內(nèi)籃球場地");

    strcpy(q[3].name, "行政樓"); strcpy(q[3].jieshao, "學(xué)校領(lǐng)導(dǎo)辦公場所");

    strcpy(q[4].name, "經(jīng)世樓"); strcpy(q[4].jieshao, "正門為創(chuàng)辦人紀(jì)念館、學(xué)校大型活動舉辦場所");

    strcpy(q[5].name, "圖書館"); strcpy(q[5].jieshao, "學(xué)校圖書館");

    strcpy(q[6].name, "西苑餐廳"); strcpy(q[6].jieshao, "一、二樓為餐廳,三樓為報告廳");

    strcpy(q[7].name, "篤學(xué)樓"); strcpy(q[7].jieshao, "教學(xué)樓");

    strcpy(q[8].name, "文理大樓"); strcpy(q[8].jieshao, "教學(xué)樓");

    strcpy(q[9].name, "計算機學(xué)院樓"); strcpy(q[9].jieshao, "教學(xué)樓");

    strcpy(q[10].name, "能動學(xué)院樓"); strcpy(q[10].jieshao, "教學(xué)樓");

    strcpy(q[11].name, "糧食學(xué)院大樓"); strcpy(q[11].jieshao, "教學(xué)樓");

    strcpy(q[12].name, "西門"); strcpy(q[12].jieshao, "教學(xué)樓");

    strcpy(q[13].name, "東區(qū)組團"); strcpy(q[13].jieshao, "學(xué)生宿舍樓");

    strcpy(q[14].name, "西區(qū)組團"); strcpy(q[14].jieshao, "一樓為商店學(xué)生買一些生活用品、二樓為餐廳");

    strcpy(q[15].name, "西體育場"); strcpy(q[15].jieshao, "舉辦運動會、鍛煉身體的好去處");

    strcpy(q[16].name, "東體育場"); strcpy(q[16].jieshao, "外有小吃");

    strcpy(q[17].name, "東苑餐廳"); strcpy(q[17].jieshao, "學(xué)生活動場所");

    strcpy(q[18].name, "東門"); strcpy(q[18].jieshao, "一樓二樓為餐廳、三樓為學(xué)生社團活動室");

    strcpy(q[19].name, "好又多超市"); strcpy(q[19].jieshao, "二樓大盤雞面不錯哦!");

    strcpy(q[20].name, "后勤服務(wù)樓"); strcpy(q[20].jieshao, "一樓麻辣燙可以哦!");

    strcpy(q[21].name, "材料學(xué)院樓"); strcpy(q[21].jieshao, "學(xué)生宿舍樓");

    strcpy(q[22].name, "蠶研所"); strcpy(q[22].jieshao, "學(xué)生娛樂場所");

    strcpy(q[23].name, "環(huán)湖跑道"); strcpy(q[23].jieshao, "一圈1100米!");

    strcpy(q[24].name, "海韻湖"); strcpy(q[24].jieshao, "學(xué)生宿舍樓");

    strcpy(q[25].name, "云書山"); strcpy(q[25].jieshao, "那個大斜坡下雪后滑雪不錯哦!");

    strcpy(q[26].name, "北苑教職工餐廳"); strcpy(q[26].jieshao, "教學(xué)樓");

    for (i = 1; i <= 28; i++)

    for (j = 1; j <= 28; j++)

    {

    if (i == j)

    map[i][j] = 0;

    else

    map[i][j] = inf;

    }

    map[1][2] = 40; map[1][16] = 140; map[1][3] = 80;

    map[2][3] = 50; map[2][1] = 40;

    map[3][4] = 50; map[3][5] = 90; map[3][17] = 50; map[3][1] = 80; map[3][2] = 50;

    map[4][6] = 70; map[4][15] = 80; map[4][3] = 50;

    map[5][3] = 90; map[5][20] = 140; map[5][17] = 130; map[5][7] = 90;

    map[6][4] = 70; map[6][8] = 40; map[6][7] = 30;

    map[7][6] = 30; map[7][10] = 80; map[7][5] = 90;

    map[8][6] = 40; map[8][9] = 30;

    map[9][8] = 30; map[9][10] = 60; map[9][15] = 90;

    map[10][9] = 60; map[10][7] = 80; map[10][11] = 60;

    map[11][10] = 60; map[11][12] = 60;

    map[12][11] = 60; map[12][13] = 100;

    map[13][12] = 100; map[13][14] = 70;

    map[14][13] = 70; map[14][16] = 100; map[14][15] = 80;

    map[15][9] = 90; map[15][4] = 80; map[15][14] = 80; map[15][16] = 90;

    map[16][1] = 140; map[16][15] = 90; map[16][14] = 100;

    map[17][3] = 50; map[17][5] = 130; map[17][18] = 40;

    map[18][17] = 40; map[18][19] = 50; map[18][20] = 40;

    map[19][18] = 50; map[19][24] = 150;

    map[20][18] = 40; map[20][21] = 30; map[20][5] = 140;

    map[21][20] = 30;

    map[22][23] = 50; map[22][25] = 70;

    map[23][22] = 50; map[23][24] = 130;

    map[24][19] = 150; map[24][23] = 130; map[24][25] = 100;

    map[25][22] = 70; map[25][24] = 100; map[25][26] = 200;

    map[26][25] = 200;

    // for(i=1;i<=26;i++)

    // {

    // for(j=1;j<=26;j++)

    // printf("%d ",map[i][j]);

    // printf("\n");

    // }

    for (i = 1; i <= 26; i++)

    for (j = 1; j <= 26; j++)

    map[j][i] = map[i][j];

    // printf("\n\n\n\n");

    // for(i=1;i<=26;i++)

    // {

    // for(j=1;j<=26;j++)

    // printf("%d ",map[i][j]);

    // printf("\n");

    // }

    }

    void liebiao() //景點列表

    {

    system("cls"); //清屏

    printf("\n\n\n");

    printf("\t\t\t\t\t * * * * * * * * * * * * * * ** * * * * * * * * * * * * * *\n");

    printf("\t\t\t\t\t * * ????????????????????*景點列表* ????????????????????* *\n");

    printf("\t\t\t\t\t * ****************************************************** *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<1>學(xué)校大門 ?<2>體育館 ?<3>行政樓 ??<4>經(jīng)世樓 ????* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<5>圖書館 ?<6>西苑餐廳 ??<7>篤學(xué)樓 ??<8>文理大樓 ?* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<9>計算機學(xué)院樓 ?<10>能動學(xué)院樓 ?<11>糧食學(xué)院大樓 * *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<12>西門 ??????<13>西區(qū)組團 ?????<14>東區(qū)組團 ????* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<15>西體育場 ????<16>東體育場 ????<17>東苑餐廳 ???* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<18>東門 ???<19>好又多超市 ???<20>后勤服務(wù)樓 ?????* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<21>材料學(xué)院樓 ??<22>蠶研所 ??<23>環(huán)湖跑道 ???????* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * * ?<24>海韻湖 ??<25>云書山 ??<26>北苑教職工餐廳 ?????* *\n");

    printf("\t\t\t\t\t * * ???????????????????????????????????????????????????* *\n");

    printf("\t\t\t\t\t * ****************************************************** *\n");

    printf("\t\t\t\t\t * * * * * * * * * * * * * * ** * * * * * * * * * * * * * *\n");

    printf("\n\n\n");

    }

    //查詢方式

    int chaxunfangshi(int x)

    {

    int i;

    system("cls"); //清屏

    printf("\n");

    printf("\t\t\t\t\t ???????????????????*請輸入查詢方式*\n\n");

    printf("\t\t\t\t\t ?????????????????1、輸入景點編號查詢\n\n");

    printf("\t\t\t\t\t ?????????????????2、輸入景點名稱查詢\n\n");

    printf("\t\t\t\t\t ?????????????????0、返回上一界面\n\n\n\n\n\n\n");

    scanf("%d", &i);

    return i;

    }

    //查詢景點編號

    int bianhao(char s[])

    {

    int f = 0, i;

    for (i = 1; i <= 26; i++)

    {

    if (strcmp(q[i].name, s) == 0)

    return i;

    }

    return -1;

    }

    void Dijkstra(int v0, int s) //迪杰斯特拉求最短路徑,并輸出路線

    {

    int min, i, j, u, v;

    int p[110], l[110];

    memset(p, -1, sizeof(p));

    memset(l, 0, sizeof(l));

    memset(book, 0, sizeof(book));

    for (i = 1; i <= 26; i++)

    {

    dis[i] = map[v0][i];

    if (dis[i] < inf) //v0能直接到達(dá),即上一站點為v0

    p[i] = v0;

    }

    book[v0] = 1;

    for (i = 1; i < 26; i++)

    {

    min = inf;

    for (j = 1; j <= 26; j++) //每次找出距離v0最近點

    {

    if (book[j] == 0 && dis[j] < min)

    {

    min = dis[j];

    u = j;

    }

    }

    book[u] = 1; //標(biāo)記該點

    for (v = 1; v <= 26; v++)

    {

    if (book[v] == 0 && dis[v] > dis[u] + map[u][v]) //通過最近點更新其他邊

    {

    p[v] = u; //存儲更新的邊,即為路線

    dis[v] = dis[u] + map[u][v];

    }

    }

    }

    v = s;

    i = 1;

    while (p[v] != v0) //將路線存入棧中,正序輸出

    {

    l[i++] = p[v];

    v = p[v];

    }

    printf("\n");

    u = i - 1;

    printf("路線為:\n");

    printf("%s--->", q[v0].name);

    for (i = u; i >= 1; i--)

    printf("%s--->", q[l[i]].name);

    printf("%s\n", q[s].name);

    printf("最短路徑長度為:%d 米\n", dis[s]);

    }

    //導(dǎo)航界面

    void kaishidaohang()

    {

    int x, m, n, u, v, i, j;

    char c[100];

    system("cls"); //清屏

    printf("\n\n\n");

    printf("\t\t\t\t ■■■■■■■■■■■■■■■■■■■■■■■■■■\n");

    printf("\t\t\t\t ■ ???????????????????????????????????????????????■\n");

    printf("\t\t\t\t ■歡 迎 使 用 江 蘇 科 技 大 學(xué) 校 園 導(dǎo) 航 系 統(tǒng) ■\n");

    printf("\t\t\t\t ■ ???????????????????????????????????????????????■\n");

    printf("\t\t\t\t ■■■■■■■■■■■■■■■■■■■■■■■■■■\n");

    printf("\n\n\n");

    printf("\t\t\t ???1、遍歷所有景點;\t\t\t2、查詢?nèi)我饩包c信息;\n\n\n");

    printf("\t\t\t ???3、查詢?nèi)我鈨删包c間的最短路徑; ????4、返回至主界面;\n");

    printf("\n\n\n");

    while (1)//實現(xiàn)輸入錯誤可重新輸入

    {

    scanf("%d", &x);

    if (x == 1)

    {

    v = chaxunfangshi(x);

    while (1)

    {

    if (v == 1)

    {

    liebiao();

    printf("請輸入當(dāng)前所在景點編號:\n");

    scanf("%d", &n);

    while (1)

    {

    if (n >= 1 && n <= 26)

    {

    for (i = 1; i <= 26; i++)

    {

    if (i != n)

    Dijkstra(n, i);

    }

    printf("\n\n按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n該景點不存在!請重新輸入景點編號:\n");

    scanf("%d", &n);

    }

    }

    break;

    }

    else if (v == 2)

    {

    liebiao();

    printf("請輸入當(dāng)前所在景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    while (1)

    {

    if (n >= 1 && n <= 26)

    {

    for (i = 1; i <= 26; i++)

    {

    if (i != n)

    Dijkstra(n, i);

    }

    printf("\n\n按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n該景點不存在!請重新輸入景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    }

    }

    break;

    }

    else if (v == 0)

    {

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n\n輸入錯誤請重新輸入!\n\n");

    scanf("%d", &v);

    }

    }

    break;

    }

    else if (x == 2)

    {

    v = chaxunfangshi(x);

    while (1)

    {

    if (v == 1)

    {

    liebiao();

    printf("請輸入景點編號:\n");

    scanf("%d", &n);

    while (1)

    {

    if (n >= 1 && n <= 26)

    {

    printf("\n\n%s\n\n%s\n\n", q[n].name, q[n].jieshao);

    printf("按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n該景點不存在!請重新輸入景點編號:\n");

    scanf("%d", &n);

    }

    }

    break;

    }

    else if (v == 2)

    {

    liebiao();

    printf("請輸入景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    while (1)

    {

    if (n >= 1 && n <= 26)

    {

    printf("\n\n%s\n\n%s\n\n", q[n].name, q[n].jieshao);

    printf("按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n該景點不存在!請重新輸入景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    }

    }

    break;

    }

    else if (v == 0)

    {

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n\n輸入錯誤請重新輸入!\n\n");

    scanf("%d", &v);

    }

    }

    break;

    }

    else if (x == 3)

    {

    v = chaxunfangshi(x);

    while (1)

    {

    if (v == 1)

    {

    liebiao();

    printf("請輸入起點景點編號:\n");

    scanf("%d", &n);

    printf("\n請輸入終點景點編號:\n");

    scanf("%d", &m);

    while (1)

    {

    if (n >= 1 && n <= 26 && m >= 1 && m <= 26 && n != m)

    {

    Dijkstra(n, m);

    printf("\n\n按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n輸入不合法!請重新輸入!\n\n");

    printf("請輸入起點景點編號:\n");

    scanf("%d", &n);

    printf("\n請輸入終點景點編號:\n");

    scanf("%d", &m);

    }

    }

    break;

    }

    else if (v == 2)

    {

    liebiao();

    printf("請輸入起點景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    printf("\n請輸入終點景點名稱:\n");

    scanf("%s", c);

    m = bianhao(c);

    while (1)

    {

    if (n >= 1 && n <= 26 && m >= 1 && m <= 26 && n != m)

    {

    Dijkstra(n, m);

    printf("\n\n按回車鍵返回至導(dǎo)航系統(tǒng)界面\n\n");

    getchar(); getchar();

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n輸入不合法!請重新輸入!\n\n");

    printf("請輸入起點景點名稱:\n");

    scanf("%s", c);

    n = bianhao(c);

    printf("\n請輸入終點景點名稱:\n");

    scanf("%s", c);

    m = bianhao(c);

    }

    }

    break;

    }

    else if (v == 0)

    {

    kaishidaohang();

    break;

    }

    else

    {

    printf("\n\n輸入錯誤請重新輸入!\n\n");

    scanf("%d", &v);

    }

    }

    break;

    }

    else if (x == 4)

    {

    daohanglan();

    break;

    }

    else

    {

    printf("\n\n輸入錯誤!請重新輸入!\n");

    }

    }

    }

    //導(dǎo)航欄主界面

    void daohanglan()

    {

    system("cls"); //清屏

    int m;

    printf("\n\n\n\n\n");

    printf("\t\t\t\t\t ???******************************************************\n");

    printf("\t\t\t\t\t ???*----------------------主界面------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------1、進入導(dǎo)航系統(tǒng)---------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------2、學(xué)校簡介-------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------3、退出程序-------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------4、制作人---------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???******************************************************\n");

    scanf("%d", &m);

    while (1)

    {

    if (m == 1)

    {

    kaishidaohang();

    break;

    }

    else if (m == 2)

    {

    system("cls");

    printf("\n\n\n\n\n");

    printf("\t\t\t\t\t ???****************************************************\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* ??江蘇科技大學(xué),簡稱“江科大”,位于江蘇省鎮(zhèn)江市 *\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* 是江蘇省重點建設(shè)高校,江蘇省人民政府與中國船舶集 *\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* 團有限公司共建高校,國家國防科技工業(yè)局與江蘇省人 *\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* 民政府共建高校。學(xué)校源自1933年創(chuàng)辦的上海大公職業(yè) *\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* 學(xué)校,于2004年更名為江蘇科技大學(xué)。 ??????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???****************************************************\n");

    printf("\n\n\n\n\n");

    printf("按回車鍵返回主界面\n");

    getchar(); getchar();

    daohanglan();

    break;

    }

    else if (m == 3)

    {

    system("cls");

    printf("\n\n\n\n\n");

    printf("\t\t\t\t\t∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴\n");

    printf("\t\t\t\t\t∴∵ ?????????????????????∴∵\n");

    printf("\t\t\t\t\t∴∵ ?????歡 迎 使 用 ????∴∵\n");

    printf("\t\t\t\t\t∴∵ ?????????????????????∴∵\n");

    printf("\t\t\t\t\t∴∵∴∵∴∵∴∵∴∵∴∵∴∵∴\n");

    printf("\n\n\n");

    break;

    }

    else if (m == 4)

    {

    system("cls"); //清屏

    printf("\n\n\n\n\n");

    printf("\t\t\t\t\t ???****************************************************\n");

    printf("\t\t\t\t\t ???* ????????????????????制作人 ??????????????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????江蘇科技大學(xué)計算機學(xué)院 ?????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* ???????????????20級軟件工程2班 ??????????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???* ????????????????????來克垚??????????????????????*\n");

    printf("\t\t\t\t\t ???* ?????????????????????????????????????????????????*\n");

    printf("\t\t\t\t\t ???****************************************************\n");

    printf("\n\n\n\n\n");

    printf("按回車鍵返回主界面\n");

    getchar(); getchar();

    daohanglan();

    break;

    }

    else

    {

    printf("\n\n\n\t\t輸入錯誤請重新輸入!\n\n\n\n");

    scanf("%d", &m);

    }

    }

    }

    //歡迎進入

    void zhujiemian()

    {

    printf("\n\n\n\n\n");

    printf("\t\t\t\t\t ???******************************************************\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*---------------------Welcome!-----------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*--------------江蘇科技大學(xué)校園導(dǎo)航系統(tǒng)--------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*-------------------按回車鍵繼續(xù)---------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???*----------------------------------------------------*\n");

    printf("\t\t\t\t\t ???******************************************************\n");

    getchar();

    daohanglan();

    }

    int main(void)

    {

    system("mode con cols=150 lines=200"); //改變運行窗口大小

    cuntu();

    //getchar();getchar();

    zhujiemian();

    return 0;

    }

    、用戶使用說明

    如上文注釋

    項目3:算術(shù)表達(dá)式求解

    一、問題及要求

    【問題描述】?設(shè)計一個簡單的算術(shù)表達(dá)式計算器。

    【基本要求】?實現(xiàn)標(biāo)準(zhǔn)整數(shù)類型的四則運算表達(dá)式的求值(包含括號,可多層嵌入)

    【測試數(shù)據(jù)】?(30+2*70)/3-12*3 5+(9*(62-37)+15)*6 要求自行設(shè)計非法表達(dá)式,進行程序測試,以保證程序的穩(wěn)定運行。

    【實現(xiàn)提示】?可以設(shè)計以下輔助函數(shù) status isNumber(char ReadInChar); ?//視ReadInchar 是否是數(shù)字而返回 TRUE 或 FALSE 。
    int TurnToInteger(char IntChar); ? // 將字符’0’.’9’ 轉(zhuǎn)換為整數(shù) 9

    二、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計

    數(shù)據(jù)結(jié)構(gòu)的選擇

    計算器系統(tǒng),選擇數(shù)據(jù)結(jié)構(gòu)里的棧的結(jié)構(gòu)來解決

    概要設(shè)計

    1)功能分析

    實現(xiàn)標(biāo)準(zhǔn)整數(shù)類型的四則運算表達(dá)式的求值(包含括號,可多層嵌入)

    表達(dá)式計算規(guī)則

    先乘除,后加減

    從左到右計算

    先括號內(nèi),后括號外

    2)基本思想?

    ?由于用戶輸入的算數(shù)表達(dá)式是中綴表達(dá)式,不利于機器的自動求解。而我們知道在語法掃描分析等應(yīng)用場合我們一般采用后綴表達(dá)式(逆波蘭式)做運算。對逆波蘭式求值只需從左到右掃描,遇到操作符就將左邊的兩個操作數(shù)進行計算,直到整個式子掃描結(jié)束為止。

    、詳細(xì)設(shè)計和編碼

    1.邏輯設(shè)計

    1)優(yōu)先級矩陣

    //優(yōu)先級矩陣 1表示優(yōu)先級更高,0表示優(yōu)先級更低,2表示括號相遇,-1表示不合法

    //0~5 表示 (+-*/)

    int priority[6][6] = {

    {0,0,0,0,0,2},

    {0,1,1,0,0,1},

    {0,1,1,0,0,1},

    {0,1,1,1,1,1},

    {0,1,1,1,1,1},

    {-1,1,1,1,1,1}

    };

    (2)數(shù)據(jù)棧和符號棧

    stack<double> values; ??//存放運算數(shù)

    stack<char> operators; ?//存放運算符

    【主要功能函數(shù)】

    int turnToNum(char c):將符號轉(zhuǎn)變成對應(yīng)的數(shù)字編號,非法符號返回-1

    int compare(char a, char b):比較符號a和符號b的優(yōu)先級

    bool isNumber(char c):判斷是否為數(shù)字

    double result(double a, char c, double b):產(chǎn)生運算結(jié)果

    2.物理設(shè)計

    【核心算法段】

    ????????for (int i = 0; i < (int)strlen(expression); i++) {

    ????????????char &c = expression[i]; ?//c為引用當(dāng)前字符

    ????????????if (isNumber(c)) { num = num * 10 + c - '0'; }

    ????????????else if (c == ' ') continue;

    ????????????else if (turnToNum(c) != -1) {

    ????????????????if (c != '(') {

    ????????????????????int pre = i - 1;

    ????????????????????while (expression[pre] == ' ') pre--;

    ????????????????????if (expression[pre] != ')') {

    ????????????????????????values.push((double)num);

    ????????????????????????if(show)cout << "壓入" << num << "\n";

    ????????????????????????num = 0;

    ????????????????????}

    ????????????????}

    ????????????????if (c == '=') break;

    ????????????????if (operators.empty()) {

    ????????????????????if (show) cout << "壓入" << c << "\n";

    ????????????????????operators.push(c);

    ????????????????}

    ????????????????else {

    ????????????????????bool goOn = true; //標(biāo)記是否要繼續(xù)

    ????????????????????double a, b, r; ???????//a,b分別存放數(shù)字棧最上面的兩個數(shù)字,c存放運算結(jié)果

    ????????????????????while (!operators.empty() && goOn) {

    ????????????????????????char cTop = operators.top();

    ????????????????????????switch (compare(cTop, c)) {

    ????????????????????????case 1: //棧頂優(yōu)先級比當(dāng)前大,消耗棧頂操作符,并計算

    ????????????????????????????operators.pop();

    ????????????????????????????if (show) cout << "彈出" << cTop << "\n";

    ????????????????????????????b = values.top(); values.pop();

    ????????????????????????????if (show)cout << "彈出" << b << "\n";

    ????????????????????????????a = values.top(); values.pop();

    ????????????????????????????if (show)cout << "彈出" << a << "\n";

    ????????????????????????????r = result(a, cTop, b);

    ????????????????????????????values.push(r);

    ????????????????????????????if (show)cout << "壓入" << r << "\n";

    ????????????????????????????break;

    ????????????????????????case 0: //棧頂優(yōu)先級比當(dāng)前小,將當(dāng)前符號壓入

    ????????????????????????????operators.push(c);

    ????????????????????????????if (show)cout << "壓入" << c << "\n";

    ????????????????????????????goOn = false;

    ????????????????????????????break;

    ????????????????????????case 2: //特殊的,當(dāng)括號相遇,僅做彈出括號操作

    ????????????????????????????if (show)cout << "彈出" << cTop << "\n";

    ????????????????????????????operators.pop();

    ????????????????????????????goOn = false;

    ????????????????????????????break;

    ????????????????????????}

    ????????????????????}

    ????????????????????if (operators.empty() && goOn) {

    ????????????????????????operators.push(c);

    ????????????????????????if (show)cout << "壓入" << c << "\n";

    ????????????????????}

    ????????????????}

    ????????????}

    ????????????else {

    ????????????????cout << "該算式非法\n";

    ????????????????continue;

    ????????????}

    ????????}

    ????????

    ????????while (!operators.empty()) {

    ????????????int a, b, c;

    ????????????char cTop = operators.top();

    ????????????operators.pop();

    ????????????b = values.top(); values.pop();

    ????????????a = values.top(); values.pop();

    ????????????c = result(a, cTop, b);

    ????????????values.push(c);

    ????????}

    ????????cout << "Answer is " << values.top() << endl;

    、用戶使用說明

    如上文注釋

    總結(jié)

    以上是生活随笔為你收集整理的数据结构课程设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。