當前位置:首頁 » 操作系統 » 數據結構與演算法實驗

數據結構與演算法實驗

發布時間: 2022-05-23 09:00:15

演算法與數據結構實驗順序表的應用實驗報告

者visual c++都行。
看看這個也許你會明白的更多一些。
實驗一 多項式相加

一、實驗目的
熟悉鏈表的使用。
掌握如何使用C語言實現鏈表的說明、創建以及結點的插入和刪除等操作。

二、實驗要求
熟悉C語言編程

三、實驗內容
對於兩個一元多項式中所有指數相同的項,對應系數相加,若其和不為零,則構成「和多項式」的一項;對於兩個一元多項式中所有指數不相同的項,則分別復抄到「和多項式」中去。

四、實驗步驟
1. 用鏈表作一元多項式的數據結構,用C語言對鏈表作說明
2. 生成輸入一元多項式的函數
3. 輸入一元多項式A(x)和B(x)
4. 以一元多項式A(x)為和多項式,將B(x)多項式中系數加入到A(x)中去

實驗二 後綴表達式計算

一、實驗目的
熟悉棧的使用。
掌握如何使用C語言實現棧的說明、創建以及進棧和出棧等操作。

二、實驗要求
熟悉C語言編程。

三、實驗內容
先將中綴表達式(就是我們通常所見的)轉換為後綴表達式,比如 a+b*c+d 要變成 abc*+d+;轉換的方法用棧來實現,涉及到運算符的優先順序;然後用另一個棧來對後綴表達式計算結果

四、實驗步驟
1.讀入字母/數字--〉字母/數字進棧
2.讀入運算符--〉退出兩個字母/數字,用運算符計算結果,並將結果進棧
3.棧能剛好退完,則最後的即為結果。否則表明表達式有誤

實驗三 Kmp演算法

一、實驗目的
熟悉字元串的使用。
掌握如何kmp演算法實驗字元串的模式匹配。

二、實驗要求
熟悉C語言編程。

三、實驗內容
求出子串(模式串)的next,利用kmp演算法實驗模式與主串的匹配演算法。

四、實驗步驟
1.生成模式串的next函數
2.從第1個字元開始,進行模式串與主串的比較,
3.如果出現失配,將模式串的第next[j]位置開始,繼續與主串進行比較。

實驗四 Huffman 編碼

一、實驗目的
熟悉Huffman編碼方法。
了解並弄懂Huffman編碼實現信息的無損壓縮原理。

二、實驗要求
熟悉C語言編程。

三、實驗內容
1.根據給定的n個權值(w1, w2, …, wn)構成n棵二叉樹的集合F=,其中每棵二叉樹Ti中只有一個帶樹為Ti的根結點
2.在F中選取兩棵根結點的權值最小的樹作為左右子樹構造一棵新的二叉樹,且置其根結點的權值為其左右子樹權值之和
3.在F中刪除這兩棵樹,同時將新得到的二叉樹加入F中
4.重復2, 3,直到F只含一棵樹為止

四、實驗步驟
1.用C語言實現二叉樹的說明
2.輸入n個權值,並生成n個二叉樹
3.對n個二叉樹逐步生成Huffman樹
4.對Huffman樹的每個葉子結點生成編碼

實驗五 關鍵路徑

一、實驗目的
熟悉關鍵路徑的實現方法。
了解AOE-網以及關鍵路徑在工程實踐中的應用。

二、實驗要求
熟悉C語言編程。

三、實驗內容
根據輸入的弧,生成AOE-網。從始點開始,找出到終點的多條路徑,求這些路徑上的關鍵活動。由關鍵活動組成的從始點到終點的路徑,即為關鍵路徑。

四、實驗步驟
1.輸入e條弧,生成AOE-網的存儲結構。
2.從始點v0出發,令ve[0]=0,按拓撲有序求ve[j]
3.從終點vn-1出發,令vl[n-1]=ve[n-1],按逆拓撲有序求vl[i]
4.根據各頂點的ve和vl值,求每條弧(活動)ai的最早開始時間e[ai]和最遲開始時間l[ai]
5.如果e[ai]=l[ai],則ai為關鍵活動

實驗六 最短路經

一、實驗目的
熟悉最短路徑的實現方法。
了解AOE-網以及最短路徑在求解實際問題中的應用。

二、實驗要求
熟悉C語言編程。

三、實驗內容
從始點v0開始,逐步求v0到其它可達的各頂點的最短路徑,直到所有頂點計算完成為止。

四、實驗步驟
1.輸入e條弧,生成AOE-網的存儲結構。
2.初始化: S ← ;
dist[j] ← Edge[0][j], j = 1, 2, …, n-1; // n為圖中頂點個數
3.求出最短路徑的長度:
dist[k] ← min , i  V- S ;
S ← S U ;
4.修改從v0到V-S集合中各頂點的最短路徑:
dist[i] ← min,
對於每一個 i 屬於 V- S ;
5.判斷:若 S = V, 則演算法結束,否則轉 2。

實驗七 二叉排序樹

一、實驗目的
熟悉二叉排序樹的使用。
掌握如何使用C語言實現二叉樹的說明、創建以及二叉排序樹的生成等操作。

二、實驗要求
熟悉C語言編程。

三、實驗內容
給定一個記錄關鍵字的值,與二叉排序樹的根結點值比較,如果小於根結點的值,則向左子樹查找;如果大於根結點的值,則向右子樹查找。如果查找到葉子結點leaf,仍沒有找到記錄,則:如果關鍵字的值小於leaf的值,則插入該leaf結點的左邊,做leaf的左孩子,否則做leaf的右孩子。

四、實驗步驟
1.用C語言實現二叉樹的說明
2.直接將輸入的值作為根結點的值
3.與根結點比較,小於則放到左子樹上,大於則放到右子樹上。

實驗八 希爾排序

一、實驗目的
熟悉希爾排序的使用。
掌握如何使用C語言實現若干記錄的排序。

二、實驗要求
熟悉C語言編程。

三、實驗內容
先將整個待排記錄序列分割成為若乾子序列分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。

四、實驗步驟
1.輸入待排序記錄
2.首先取一個整數 gap < n(待排序記錄數) 作為間隔, 將全部記錄分為 gap 個子序列, 所有距離為 gap 的記錄放在同一個子序列中
3.在每一個子序列中分別施行直接插入排序。
4.然後縮小間隔 gap, 例如取 gap = gap/2
5.重復上述的子序列劃分和排序工作,直到最後取gap = 1, 將所有記錄放在同一個序列中排序為止。

實驗九 快速排序

一、實驗目的
熟悉快速排序的使用。
掌握如何使用C語言實現若干記錄的排序。

二、實驗要求
熟悉C語言編程。

三、實驗內容
通過一趟將待排記錄分割成獨立的兩個部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小。再對兩個部分分別進行快速排序。

四、實驗步驟
1.輸入待排序的記錄,並選擇第一個記錄作為pivotkey記錄
2.從high指向的記錄開始,向前找到第一個關鍵字的值小於Pivotkey的記錄,將其放到low指向的位置,low+1
3.從low指向的記錄開始,向後找到第一個關鍵字的值大於Pivotkey的記錄,將其放到high指向的位置,high-1
4.重復2,3,直到low=high,將樞軸記錄放在low(high)指向的位置
5.重復2,3,4,直到整個記錄有序為止

實驗十 堆排序

一、實驗目的
熟悉堆排序的使用。
掌握如何使用C語言實現若干記錄的排序。

二、實驗要求
熟悉C語言編程。

三、實驗內容
首先將一個無序序列建成一個堆;然後輸出堆頂元素;在輸出堆頂元素之後,調整剩餘的元素成為一個新堆。

四、實驗步驟
1.輸入記錄,按順序創建一個完全二叉樹
2.根據篩選演算法,從最後一個結點開始,一直到根結點,逐步篩選,建造初始堆。
3.輸出堆頂記錄,將最後一個結點放到堆頂,並做篩選,重新建造一個堆
4.直到所有記錄輸出為止

② 演算法與數據結構實驗:迴文判斷

#include<iostream>
using namespace std;
struct queue{
queue *front;
queue *rear;
queue *next;
char data;
};

#define maxsize 100;
#define T 10;

struct sqstack{
char *base;
char *top;
int stacksize;
};

sqstack inistack(sqstack &s){
s.base=new char [10];
if(!s.base) cout<<"error";
s.top=s.base;
s.stacksize=maxsize;
return s;
}

sqstack push(sqstack &s,char e){
if(s.top-s.base>=s.stacksize){
s.base=new char[10];
if(!s.base) cout<<"error";
s.top=s.base+s.stacksize;
s.stacksize+=T;
}
*s.top=e;
s.top++;
return s;
}

sqstack pop(sqstack &s, char e){
if(s.top==s.base)cout<<"error";
e=*s.top;
-- s.top;
return s;
}

queue iniqueue(queue &q){
q.front=q.rear=new queue;
if(!q.front) cout<<"error";
q.front->next=NULL;
return q;
}

queue inqueue(queue &q,char e){
queue *p;
p=new queue;
if(!p) cout<<"error";
p->data=e;
q.rear->next=p;
q.rear=p;
q.rear->next=NULL;
return q;
}

queue dlqueue(queue &q,char e){
queue* p;
p=new queue[10];
if(q.front==q.rear)cout<<"error";
else{
p=q.front->next;
e=p->data;
q.front->next=p->next;
if(q.rear==p)q.rear=q.front;
delete p;
}
return q;
}

char gethead(queue &q){
char e;
if(q.rear==q.front) cout<<"error";
else e=(q.front->next)->data;
return e;
}

char gettop(sqstack &s){
char e;
if(s.top==s.base){
cout<<"error";
}
e=*(s.top-1);
return e;
}

int main(){
int i;
sqstack s;
queue h;

char ch[5] ,x,y;
inistack(s);
iniqueue(h);

for(i=1;i<=5;i++){
cin>>ch[i];
push(s,ch[i]);
inqueue(h,ch[i]);
}

for(int j=1;j<=5;j++){
x=gettop(s);
y=gethead(h);
if(x!=y) cout<<"\tfalse\t"<<endl;
else cout<<"\tequal\t"<<endl;

pop(s,x);
dlqueue(h,y);
}

system("pause");
return 0;
}

③ 數據結構與演算法實驗

計算機科學系

計算機科學與技術專業 培養具有良好綜合素質和開拓創新能力,系統掌握本專業的基本理論、基礎知識和基本技能與方法,具有實際應用和科學研究能力的計算機及其相關技術與產業領域的復合型應用技術人才。

主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、操作系統原理、匯編語言程序設計、資料庫系統原理、編譯原理、軟體工程導論、計算機網路、計算機體系結構、並行與分布式計算、計算機圖形學、信息安全技術、多媒體技術、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。

網路工程專業 培養具有實際運用先進的工程化方法和工具從事網路規劃、設計、開發和維護等工作,具備工程項目的組織與管理能力的實用型、復合型網路工程技術與管理的高級人才。

主要課程:數學分析、高等代數、數理邏輯、集合論與圖論、計算機科學導論、程序設計基礎、數字電路與邏輯設計、計算機組成原理、數據結構與演算法、計算機網路、操作系統原理、計算機體系結構、計算機介面技術、通信原理、網路系統設計、密碼學與網路安全、無線通信與網路、Linux原理與應用等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。

信息安全專業 培養具有扎實的數理基礎,較好的外語和計算機技術運用能力,掌握信息安全的基本理論與技術、計算機與網路通信及其安全技術以及信息安全法律法規等方面的知識,能運用所學知識與技能去分析和解決相關的實際問題,具有較高的綜合業務素質、較強的創新與實踐能力,可以在政府、國防、金融、公安和商業等部門從事信息安全產品研發、信息系統安全分析與設計、信息安全技術咨詢與評估服務、信息安全教育、信息安全管理與執法等工作的高級專業人才。

主要課程:數學分析、數理邏輯、集合論與圖論、信息安全數學基礎、計算機組成原理、程序設計基礎、數據結構與演算法、資料庫系統原理、軟體工程導論、計算機介面技術、計算機網路、通信原理、資訊理論基礎、操作系統安全、Linux原理與應用、網路協議與驗證、移動計算、計算機密碼學、網路安全技術、計算機病毒、信息隱藏技術、電子商務技術、信息安全法律法規等。專業課程還將安排相關的實驗(實習)、課程設計或社會實踐,以加強學生的實踐能力與開拓能力。高年級同學還可以選修本學院其它專業的相關課程。

上述專業的畢業生適合在計算件軟硬體企業、網路公司、電信企業、金融、交通、銀行等各類企事業單位就職,從事計算機技術管理、計算機控制、軟體和信息安全產品的生產、開發、應用和維護工作,也可在政府管理部門、金融和經濟管理部門從事計算機應用、網路信息管理和維護工作,還可在高等學校和研究部門從事教學、科研工作。

電子與通信工程系

電子信息科學與技術專業 培養基礎扎實、知識面較寬、素質高、能力強,有一定創新能力、科學研究能力和解決實際問題的能力,適應21世紀社會和經濟發展的需要,能從事電子信息科學與技術領域的科學研究、教學與應用技術等工作的復合型人才。

畢業生具有堅實的數理基礎,掌握電子學與信息系統的基本理論和方法。熟悉電路與系統、電磁場與電磁波理論、微波與射頻技術、計算機網路以及通信和計算機應用等技術。具有較高的實驗能力和一定的分析和解決實際問題的能力;了解電子學與信息系統的新發展並具有一定的科學研究、應用研究、技術開發及教學等方面的能力。較為熟練地使用一種外國語閱讀專業書刊及外文資料。

學生畢業後適合在通訊、銀行、企業、機關等部門,從事電子技術和計算機技術管理、生產方面的開發應用,以及在高等學校和研究部門從事教學、科研工作。

主要課程:高等數學、概率論與數理統計、大學物理及實驗、高級程序設計、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、集成電路設計、資訊理論、微波技術與實驗、數字信號處理、計算機通信與網路、通信原理、EDA原理及應用、單片機原理及應用、數據結構與演算法、現代通信技術、資料庫系統原理等,學生還可選修學校及學院其他專業的相關課程。

自動化專業 自動化是以電子技術、計算機技術、檢測技術、通信技術和控制理論為基礎,研究自動控制系統的組成結構、控制規律及其應用的學科。該專業培養德、智、體全面發展,注重德、智、體、美、勞,具有健全的心理素質和健康的體格。基礎扎實、知識面寬、綜合素質高、實踐能力強,適應適應21世紀社會和經濟發展的需要,能從事自動化和計算機網路控制工程領域的先進技術研究、設計、應用開發及教學等方面的高級復合型人才。

畢業生應具有控制科學與工程學科扎實的基礎理論、基本技能和方法;具有對電子電氣電路、控制系統進行分析、設計和研究開發的能力;掌握信號自動檢測、數據處理的基礎知識與技能;掌握計算機與網路控制技術;有嚴謹的科學作風和創新能力;具有獨立進行科學研究、應用研究、分析和解決實際問題的能力。

學生畢業後適合在各類企業、國家政府部門、事業、通信、銀行、軍事等部門從事電子技術、計算機技術、通信技術及生產過程自動化方面的應用研究、產品開發及行政管理工作,以及在高等學校和研究等部門從事教學、科研及管理工作。

主要課程:高等數學、概率論與數理統計、工程數學、數值計算、高級程序設計、大學物理及實驗、電路基礎理論及實驗、模擬電子技術及實驗、數字電路與邏輯設計及實驗、電力電子技術、電機及拖動基礎、微型計算機原理及實驗、自動控制原理及實驗、信號與系統、現代控制理論、計算機控制技術及實驗、計算機通信與網路、數字信號處理、電氣與可編程式控制制器、過程式控制制工程、單片機原理及應用、自動測量技術、電力拖動自動控制系統、虛擬儀器技術、數據結構、操作系統、資料庫系統原理、科技信息檢索等,學生還可選修學校及學院其他專業的相關課程。

通信工程專業 培養基礎扎實、知識面較寬、綜合素質高、實踐能力強,適應21世紀社會和經濟發展的需要,系統掌握電路分析與信號處理理論、通信原理、網路理論、電磁場理論、傳輸原理、現代電信交換等專業基礎理論;掌握各類通信網、通信系統及其主要設備的構成原理、技術性能、設計、調試、運行維護和管理的基本知識;對國內外通信工程及相關學科的現狀和發展趨勢有一定的了解;有嚴謹的科學作風和創新能力;具有獨立對一般的通信系統和網路進行分析、設計和研究開發的能力。能從事現代通信工程和電信網路先進技術研究、設計、開發及教學等方面的高級復合型人才。

學生畢業後適合在電信企業、郵電管理部門、銀行、交通等部門從事通信、電子技術和計算機應用等方面的管理和技術開發工作,也可以在高等學校和研究部門從事教學和科研工作。

主要課程:高等數學、概率論與數理統計、高級程序設計、大學物理及實驗、電路基礎理論、模擬電子技術及實驗、數字電路與邏輯設計及實驗、微型計算機原理及實驗、高頻電路、信號與系統、電磁場與電磁波、微波技術實驗、通信原理、計算機網路、數字信號處理、資訊理論、操作系統、資料庫系統原理、數字通信系統及實驗、無線通信原理、現代電信交換、光纖通信、數字圖象處理、數據結構、單片機原理及應用、計算機視覺等。學生還可選修該學院其他專業的相關課程。

謝謝

④ 數據結構與演算法實驗題 條形圖輪廓問題

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LBound (-3000)
#define UBound 3000
#define Cod2Idx(x) ((x)-LBound)
#define Size Cod2Idx(UBound+1)
int main() {
int hs[Size], n;
int i, l, r, h, i0, i1;
memset(hs, 0, sizeof(*hs) * Size);
scanf("%d", &n);
for (i0=UBound, i1=LBound; n>0; n--) {
scanf("%d %d %d", &l, &h, &r);
if (l < i0) i0 = l;
if (r > i1) i1 = r;
for (i=l; i<r; i++)
if (hs[Cod2Idx(i)] < h)
hs[Cod2Idx(i)] = h;
}
for (i=i0, h=0; i<i1; i++)
if (hs[Cod2Idx(i)] != h)
printf("%d %d ", i, h=hs[Cod2Idx(i)]);
printf("%d %d\n", i, 0);
return 0;
}

⑤ 數據結構與演算法實驗代碼

#include <cstdio>

int gold[225],medal[225],population[225];
int list[10];
int fir = 0;//用來判斷是否是第一個元素用的
void printresult(int check_number,int n);
int main()
{
int n,m;

scanf("%d%d",&n,&m);
for(int i = 0;i < n;i++)
scanf("%d%d%d",&gold[i],&medal[i],&population[i]);
for(int i = 0;i < m;i++)
{
int check_number;
scanf("%d",&check_number);
printresult(check_number,n);
}
printf("\n");
return 0;
}
void printresult(int check_number,int n)
{
for(int i = 0;i < n;i++)
{
if(gold[i]>gold[check_number])
list[1]++;
}
int result = ++list[1];//這里還要多加一個1,因為數組原來是0
int num = 1;
for(int i = 0;i < n;i++)
{
if(medal[i]>medal[check_number])
list[2]++;
}
list[2]++;
double gold_per = gold[check_number]*1.0/population[check_number];
for(int i = 0;i < n;i++)
{
if((gold[i]*1.0/population[i])>gold_per)
list[3]++;
}
list[3]++;
double medal_per = medal[check_number]*1.0/population[check_number];
for(int i = 0;i < n;i++)
{
if(medal[i]*1.0/population[i]>medal_per)
list[4]++;
}
list[4]++;
for(int i = 1;i < 5;i++)
{
if(list[i]<result)
{
result = list[i];
num = i;
}
}
for(int i = 1;i < 5;i++)
list[i] = 0;//對排名數組清零,因為之後要多次調用
if(!fir)
{
printf("%d:%d",result,num);//首個輸入前面不用空格
fir = 1;
}
else
printf(" %d:%d",result,num);
}
//如果超時的話還可以再優化,不過國家的數量比較少,應該不會
//優化就是把排名是1的話直接輸出,不進行之後運算

⑥ 數據結構與演算法實驗與C++語言實驗哪個更難

1、如果單純從研究的角度來說,數據結構和演算法更加難。
2、但是如果你的C++實驗中就是設計一個演算法的話(以前沒有出現的),從這種意義來說數據結構和演算法是C++實驗的一部分。
3、綜合來說,其實並沒有誰難誰易,主要是學習或者研究的角度不同會有差異。

⑦ 數據結構與演算法的實驗內容

第一題用python寫的,第二題用c++寫的。

在http://pat.zju.e.cn測試通過

#第一題
defmain():
text=raw_input()
n=int(text[0:text.find('')])
m=int(text[text.find('')+1:])

root=build(n)
check(root,m)

defbuild(n):
raw_name=raw_input()
name=raw_name.strip()
root={}
root['name']=name
root['layer']=0
root['child']={}
root['sibling']={}

pre_node=root
foriinrange(1,n):
raw_name=raw_input()
name=raw_name.strip()
cur_layer=raw_name.index(name)/2
cur_node={}
cur_node['name']=name
cur_node['layer']=cur_layer
cur_node['child']={}
cur_node['sibling']={}
ifcur_layer==pre_node['layer']:
pre_node['sibling']=cur_node
elifcur_layer==pre_node['layer']+1:
pre_node['child']=cur_node
elifcur_layer==pre_node['layer']+1:
print'error! '
break
elifcur_layer<pre_node['layer']:
path=getpath(root,pre_node['name'])
pre_subling={}
forpinpath:
ifp['layer']>cur_layer:
break
else:
pre_subling=p
pre_subling['sibling']=cur_node
pre_node=cur_node

returnroot

defcheck(root,m):
#XisachildofY
#XistheparentofY
#XisasiblingofY
#XisadescendantofY
#XisanancestorofY
foriinrange(0,m):
text=raw_input()
X=text[0:text.find('')]
Y=text[text.rfind('')+1:]
if'child'intext:
path=getpath(root,X)
iflen(path)>=2andpath[-2]['name']==Y:
printTrue
else:
printFalse
if'parent'intext:
path=getpath(root,Y)
iflen(path)>=2andpath[-2]['name']==X:
printTrue
else:
printFalse
if'sibling'intext:
pathX=getpath(root,X)
pathY=getpath(root,Y)
iflen(pathX)>=2andlen(pathY)>=2andpathX[-2]['name']==pathY[-2]['name']:
printTrue
else:
printFalse
if'descendant'intext:
path=getpath(root,X)
forpinpath:
ifp['name']==Y:
break
ifp['name']==Y:
printTrue
else:
printFalse
if'ancestor'intext:
path=getpath(root,Y)
forpinpath:
ifp['name']==X:
break
ifp['name']==X:
printTrue
else:
printFalse

defgetpath(root,node_name):
path=[root]
next_node=root['child']
whileTrue:
whilenext_node!={}:
path.append(next_node)
ifnext_node['name']==node_name:
returnpath
next_node=next_node['child']

next_node=path.pop()
ifpath==[]:
returnpath
else:
next_node=next_node['sibling']

if__name__=="__main__":
main()
//第二題
#include<iostream>
#include<algorithm>

usingnamespacestd;

constintMAX=224;
typedefstruct
{
intindex;
doubleno;
intrange;
}ELEM;
intcmp_des(constELEM&a,constELEM&b){
returna.no>b.no;//降序
}
intcmp_aes(constELEM&a,constELEM&b){
returna.index<b.index;//升序
}
intmain()
{
intn,m;
cin>>n>>m;

doubledata[5][MAX];
intpaiming[5][MAX];
ELEMtmp[MAX];
intcountry[MAX];
inti,j;
for(i=0;i<n;i++)
{
cin>>data[1][i]>>data[2][i]>>data[0][i];
data[3][i]=data[1][i]/data[0][i];
data[4][i]=data[2][i]/data[0][i];
}
for(i=0;i<m;i++)
cin>>country[i];

for(i=1;i<=4;i++)
{
for(j=0;j<n;j++)
{
tmp[j].index=j;
tmp[j].no=data[i][j];
}
sort(tmp,tmp+n,cmp_des);
for(j=0;j<n;j++)
{
if(j>0&&tmp[j].no==tmp[j-1].no)
tmp[j].range=tmp[j-1].range;
else
tmp[j].range=j+1;
}
sort(tmp,tmp+n,cmp_aes);
for(j=0;j<n;j++)
{
paiming[i][j]=tmp[j].range;
}
}

inttop_12,top_34,top_1234;
for(i=0;i<m;i++)
{
top_12=paiming[1][country[i]]<=paiming[2][country[i]]?1:2;
top_34=paiming[3][country[i]]<=paiming[4][country[i]]?3:4;
top_1234=paiming[top_12][country[i]]<=paiming[top_34][country[i]]?top_12:top_34;
printf("%d:%d",(int)paiming[top_1234][country[i]],(int)top_1234);
if(i<m-1)
printf("");
}

return0;
}

⑧ 數據結構與演算法實驗題 2.3有序鏈表 ★實驗任務 有n(1<=n<=1000)個整數,a1,a2,…an已經按照從小到大順序排

#include<iostream>
using namespace std;
void main()
{
int a[2000];
int b[1000];
int n,m;
cout<<"輸入兩個整數n和m:"<<endl;
cin>>n>>m;
int i,j;
for(i=0;i<=n;i++)
{
cin>>a[i];
}
for(j=0;j<=m;j++)
{
cin>>b[j];
for(i=0;i<=2000;i++)
{
n++;
a[n]=b[j];

for(;0<=n;n--)
{
if(a[n-1]>a[n])
{

int k=0;
k=a[n-1];
a[n-1]=a[n];
a[n]=k;
}

}

}
}
cout<<"重新排序後的序列為:"<<a<<endl;
}

⑨ 數據結構與演算法實驗,c++的

public static void Around<T, TResult>(AspectAdvice advice, Func<T, TResult> fun, T t, out TResult result)
{
advice.Before(fun.Target, fun.Method, t);
result = fun(t);
advice.After(fun.Target, fun.Method, t);
}

⑩ 數據結構與演算法實驗題作業

#include<stdio.h>
void fun(long *data,long num, long *anum, long *bnum)
{
if (num<1)
{
*anum = 0;
*bnum = 0;
return;
}
if (num == 1)
{
*anum = 0;
*bnum = 1;
return;
}
if (num == 2)
{
*anum = 1;
*bnum = 1;
return;
}
long tempa,tempb;
long a,b;
tempb = 0;
a = -1;
b = num;
tempa = 0;

while (a<b)
{
if (tempa<tempb)
{
tempa += data[a+1];
++a;
continue;
}
if (tempb < tempa)
{
tempb += data[b-1];
--b;
continue;
}
if (tempa == tempb)
{
if (b-a == 1)
{
--b;
break;
}
if (b-a==2)
{
--b;
break;
}
tempa += data[a+1];
tempb += data[b-1];
++a;
--b;
if (b-a ==1)
{
break;
}
}
}

*anum = b;
*bnum = num - b;
}
int main()
{
long num;

scanf("%d",&num);
if (num<1)
{
return 0;
}

long *pData;
pData = new long[num];
long i;
for (i=0; i<num; ++i)
{
scanf("%d",&pData[i]);
}

long anum,bnum;

fun(pData,num,&anum,&bnum);

printf("%ld %ld\n",anum,bnum);

delete []pData;

return 0;
}

熱點內容
mysql存儲過程調用存儲函數 發布:2024-10-26 15:24:59 瀏覽:24
安卓手機高溫降頻怎麼關閉 發布:2024-10-26 15:02:41 瀏覽:366
mysql查看資料庫名 發布:2024-10-26 14:51:39 瀏覽:130
spg演算法 發布:2024-10-26 14:44:50 瀏覽:414
oracle查看sql執行 發布:2024-10-26 14:44:04 瀏覽:860
標准配置什麼意思 發布:2024-10-26 14:35:27 瀏覽:881
查看linux所有用戶 發布:2024-10-26 14:11:15 瀏覽:16
useraddftp 發布:2024-10-26 13:59:21 瀏覽:622
安卓免費私密相冊哪個好用 發布:2024-10-26 13:41:20 瀏覽:640
湛江移動伺服器ip 發布:2024-10-26 13:12:17 瀏覽:636