查找演算法實驗報告
『壹』 實驗報告怎麼寫
實驗報告常用的內容與格式如下
1、實驗名稱以及姓名學號
要用最簡練的語言反映實驗的內容。如驗證某程序、定律、演算法,可寫成「驗證什麼」、「分析什麼」等。
2、實驗日期和地點
比如2020年4月25日,物理實驗室。
3、實驗目的
目的要明確,在理論上驗證定理、公式、演算法,並使實驗者獲得深刻和系統的理解,在實踐上,掌握使用實驗設備的技能技巧和程序的調試方法。一般需說明是驗證型實驗還是設計型實驗,是創新型實驗還是綜合型實驗。
4、實驗設備(環境)及要求
在實驗中需要用到的實驗用物,葯品以及對環境的要求。
5、實驗原理
在此闡述實驗相關的主要原理。
6、實驗內容
這是實驗報告極其重要的內容。要抓住重點,可以從理論和實踐兩個方面考慮。這部分要寫明依據何種原理、定律演算法、或操作方法進行實驗。詳細理論計算過程。
7、實驗步驟
只寫主要操作步驟,不要照抄實習指導,要簡明扼要。還應該畫出實驗流程圖(實驗裝置的結構示意圖),再配以相應的文字說明,這樣既可以節省許多文字說明,又能使實驗報告簡明扼要,清楚明白。
(1)查找演算法實驗報告擴展閱讀
實驗報告的寫作對象是科學實驗的客觀事實,內容科學,表述真實、質朴,判斷恰當。實驗報告以客觀的科學研究的事實為寫作對象,它是對科學實驗的過程和結果的真實記錄,雖然也要表明對某些問的觀點和意見,但這些觀點和意見都是在客觀事實的基礎上提出的。
確證性是指實驗報告中記載的實驗結果能被任何人所重復和證實,也就是說,任何人按給定的條件去重復這頂實驗,無論何時何地,都能觀察到相同的科學現象,得到同樣的結果。可讀性是指為使讀者了解復雜的實驗過程,實驗報告的寫作除了以文字敘述和說明以外,還常常藉助畫圖像,列表格、作曲線圖等文式,說明實驗的基本原理和各步驟之間的關系,解釋實驗結果等。
『貳』 用c語言編寫順序查找和二分查找(折半查找)
順序查找:在一個已知無序隊列中找出與給定關鍵字相同的數的具體位置。原理是讓關鍵字與隊列中的數從第一個開始逐個比較,直到找出與給定關鍵字相同的數為止。復雜度為o(n).
二分查找又稱折半查找,它是一種效率較高的查找方法。
【二分查找要求】:1.必須採用順序存儲結構 2.必須按關鍵字大小有序排列。
【優缺點】折半查找法的優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用於不經常變動而查找頻繁的有序列表。
【演算法思想】首先,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查找關鍵字,則進一步查找前一子表,否則進一步查找後一子表。
重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
【演算法復雜度】假設其數組長度為n,其演算法復雜度為o(log(n))
#include <stdio.h>
//二分查找:
int search(int a[],int x,int n) //x為要查找的元素,n為數組長度
{
int mid=0;
int low=0;
int high=n;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x)
{ return mid; }
else if(x<a[mid])
{ high=mid-1; }
else
{ low=high+1; }
}
return -1;
}
//順序查找:
int search1(int a[],int x,int n) //x為要查找的元素,n為數組長度
{
int i;
for(i=0;i<n;i++)
{
if(a[i]==x)
return i;
}
return -1;
}
int main()
{
int i,a[10],x;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("請輸入要查找的元素");
scanf("%d",&x);
if(search(a,x,10)!=-1)printf("查找的元素在數組中的位置為%d.\n",search(a,x,10));
else printf("該元素不在數組中\n");
if(search1(a,x,10)!=-1)printf("查找的元素在數組中的位置為%d.\n",search1(a,x,10));
else printf("該元素不在數組中\n");
return 0;
}
『叄』 c語言程序編程
你好!
程序問題解決了嗎?
『肆』 課程設計 查找演算法綜合分析(C語言程序)
老大你在搞笑吧。。一天時間要別人給你一個完整的C程序?你平時都在干什麼了?
『伍』 C語言編寫數據結構查找演算法
實驗五 查找的實現
一、 實驗目的
1.通過實驗掌握查找的基本概念;
2.掌握順序查找演算法與實現;
3.掌握折半查找演算法與實現。
二、 實驗要求
1. 認真閱讀和掌握本實驗的參考程序。
2. 保存程序的運行結果,並結合程序進行分析。
三、 實驗內容
1、建立一個線性表,對表中數據元素存放的先後次序沒有任何要求。輸入待查數據元素的關鍵字進行查找。為了簡化演算法,數據元素只含一個整型關鍵字欄位,數據元素的其餘數據部分忽略不考慮。建議採用前哨的作用,以提高查找效率。
2、查找表的存儲結構為有序表,輸入待查數據元素的關鍵字利用折半查找方法進行查找。此程序中要求對整型量關鍵字數據的輸入按從小到大排序輸入。
一、順序查找
順序查找代碼:
#include"stdio.h"
#include"stdlib.h"
typedef struct node{
intkey;
}keynode;
typedef struct Node{
keynoder[50];
intlength;
}list,*sqlist;
int Createsqlist(sqlist s)
{
inti;
printf("請輸入您要輸入的數據的個數:\n");
scanf("%d",&(s->length));
printf("請輸入您想輸入的%d個數據;\n\n",s->length);
for(i=0;i<s->length;i++)
scanf("%d",&(s->r[i].key));
printf("\n");
printf("您所輸入的數據為:\n\n");
for(i=0;i<s->length;i++)
printf("%-5d",s->r[i].key);
printf("\n\n");
return1;
}
int searchsqlist(sqlist s,int k)
{
inti=0;
s->r[s->length].key=k;
while(s->r[i].key!=k)
{
i++;
}
if(i==s->length)
{
printf("該表中沒有您要查找的數據!\n");
return-1;
}
else
returni+1;
}
sqlist Initlist(void)
{
sqlistp;
p=(sqlist)malloc(sizeof(list));
if(p)
returnp;
else
returnNULL;
}
main()
{
intkeyplace,keynum;//
sqlistT;//
T=Initlist();
Createsqlist(T);
printf("請輸入您想要查找的數據的關鍵字:\n\n");
scanf("%d",&keynum);
printf("\n");
keyplace=searchsqlist(T,keynum);
printf("您要查找的數據的位置為:\n\n%d\n\n",keyplace);
return2;
}
順序查找的運行結果:
二、折半查找
折半查找代碼:
#include"stdio.h"
#include"stdlib.h"
typedef struct node{
intkey;
}keynode;
typedef struct Node{
keynoder[50];
intlength;
}list,*sqlist;
int Createsqlist(sqlist s)
{
inti;
printf("請輸入您要輸入的數據的個數:\n");
scanf("%d",&(s->length));
printf("請由大到小輸入%d個您想輸入的個數據;\n\n",s->length);
for(i=0;i<s->length;i++)
scanf("%d",&(s->r[i].key));
printf("\n");
printf("您所輸入的數據為:\n\n");
for(i=0;i<s->length;i++)
printf("%-5d",s->r[i].key);
printf("\n\n");
return1;
}
int searchsqlist(sqlist s,int k)
{
intlow,mid,high;
low=0;
high=s->length-1;
while(low<=high)
{
mid=(low+high)/2;
if(s->r[mid].key==k)
returnmid+1;
elseif(s->r[mid].key>k)
high=mid-1;
else
low=mid+1;
}
printf("該表中沒有您要查找的數據!\n");
return-1;
}
sqlist Initlist(void)
{
sqlistp;
p=(sqlist)malloc(sizeof(list));
if(p)
returnp;
else
returnNULL;
}
main()
{
intkeyplace,keynum;//
sqlistT;//
T=Initlist();
Createsqlist(T);
printf("請輸入您想要查找的數據的關鍵字:\n\n");
scanf("%d",&keynum);
printf("\n");
keyplace=searchsqlist(T,keynum);
printf("您要查找的數據的位置為:\n\n%d\n\n",keyplace);
return2;
}
折半查找運行結果:
三、實驗總結:
該實驗使用了兩種查找數據的方法(順序查找和折半查找),這兩種方法的不同之處在於查找方式和過程不同,線性表的創建完全相同,程序較短,結果也一目瞭然。
『陸』 演算法與數據結構實驗順序表的應用實驗報告
者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 <stdlib.h>
#include <stdio.h>
typedef struct node
{
int data;
struct node* next;
struct node* pre;
}node,*link;
int droplink( link &L );
//檢查表是否存在,是返回true,否返回false
bool checklink( link &L )
{
if ( L==NULL )
{
return false;
}
else
{
return true;
}
}
//新建一個結點,以data作為它的值,返回指向這個結點的指針
link createnode( int data )
{
link p;
if ( (p = (link)malloc(sizeof(node)))==NULL )
{
printf("malloc failed!@createnode\n");
return NULL;
}
else
{
p->data = data;
p->next = NULL;
p->pre = NULL;
return p;
}
}
//創建一個帶頭結點的鏈表,成功返回0,失敗返回-1
int create( link &L )
{
if ( checklink(L) )
{
printf( "鏈表已經存在,先銷毀再創建!\n" );
droplink( L );
}
if ( (L = (link)malloc(sizeof(node)))==NULL )
{
printf("malloc failed!\n");
return -1;
}
L->next = NULL;
L->pre = NULL;
return 0;
}
//統計鏈表長度,成功返回鏈表長度,失敗返回-1
int getlength( link &L )
{
int length = 0;
link p = L;
while ( p->next != NULL )
{
length++;
p = p->next;
}
return length;
}
//根據值查詢結點
link findpos( link &L, int data )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return NULL;
}
link p = L;
while ( p!=NULL )
{
if ( p->data == data )
{
return p;
}
p = p->next;
}
}
//找出第pos位置上的結點,返回指向這個結點的指針
link findnode( link &L, int pos )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return NULL;
}
if ( pos <= 0 )
{
printf("位置過小!@findnode\n");
return NULL;
}
link p = L;
for ( int i=0; i<pos; i++ )
{
if ( p==NULL )
{
printf("位置超出鏈表長度!@findnode\n");
return NULL;
}
p = p->next;
}
return p;
}
//把n插入至rear之後,成功返回0,失敗返回-1
int pushback( link &L, link &n )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return -1;
}
int length = getlength(L);
link rear = NULL;
if ( length==0 )
{
rear = L;
}
else
{
rear = findnode( L, length );
}
rear->next = n;
n->pre = rear;
rear = n;
return 0;
}
//把n插入至L的第pos位(0代表頭結點),成功返回0,失敗返回-1
int insert( link &L, link &n, int pos )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return -1;
}
link p = findnode( L, pos );
if ( p==NULL )
{
printf( "查找結點失敗!@insert\n" );
return -1;
}
n->next = p->next;
p->next = n;
n->pre = p;
n->next->pre = n;
return 0;
}
//把L鏈表第pos位置上的結點刪除 (0代表頭結點),成功返回0,失敗返回-1
int delnode( link &L, int pos )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return -1;
}
link p = findnode( L, pos );
if ( p==NULL )
{
printf( "查找結點失敗!@delnode\n" );
return -1;
}
p->pre->next = p->next;
p->next->pre = p->pre;
free( p );
p = NULL;
return 0;
}
//銷毀鏈表L 成功返回0,失敗返回-1
int droplink( link &L )
{
if ( !checklink(L) )
{
printf( "無此鏈表\n" );
return -1;
}
int length = getlength(L);
while ( length>0 )
{
delnode( L, length );
length = getlength(L);
}
free( L );
L = NULL;
return 0;
}
//對鏈表進行排序 type為1時是升序排列,為-1時為降序 (冒泡排序法)
void sort( link &L, int type )
{
int length = getlength( L );
if ( length <= 0 )
{
printf("升序過小!\n");
return;
}
switch( type )
{
case 1: printf( "升序排列鏈表!\n" );break;
case -1: printf( "降序排列鏈表!\n" );break;
default: printf( "參數錯誤!\n" );return;
}
for( int i=1; i<length; i++ )
{
for( int j=1; j<length; j++ )
{
printf("i=%d,j=%d,",i,j);
printf("findnode(L,j)->data =%d, findnode(L,j+1)->data=%d\n",findnode(L,j)->data,findnode(L,j+1)->data);
if ( type == -1 )
{
//降序
if ( findnode(L,j)->data < findnode(L,j+1)->data )
{
int t = findnode(L,j)->data;
findnode(L,j)->data = findnode(L,j+1)->data;
findnode(L,j+1)->data = t;
}
}
else
{
//升序
if ( findnode(L,j)->data > findnode(L,j+1)->data )
{
int t = findnode(L,j)->data;
findnode(L,j)->data = findnode(L,j+1)->data;
findnode(L,j+1)->data = t;
}
}
}
}
}
void output( link &L )
{
link p=L->next;
int i=0;
while ( p!=NULL )
{
printf( "[%d]=\t%d\n", i, p->data );
i++;
p=p->next;
}
}
main()
{
int length;
link L = NULL;
//新建鏈表
create( L );
printf("===輸入數據===\n");
printf("請輸入鏈表結點數量:");
scanf( "%d", &length );
if ( length<=0 )
{
printf("數量錯誤!退出程序\n");
return -1;
}
int i=0;
int data;
link tmp = NULL;
while ( i!=length )
{
printf("請輸入data值:" );
scanf( "%d", &data );
tmp = createnode(data);
pushback( L, tmp );
i++;
}
output(L);
printf("===插入新節點===\n");
printf("請輸入data值:" );
scanf( "%d", &data );
tmp = createnode(data);
insert( L, tmp, 2 );
output(L);
printf("===查詢節點===\n");
printf("請輸入要查詢的data值:" );
scanf( "%d", &data );
findpos( L, data );
printf("===鏈表長度為%d===\n", getlength(L));
printf("升序排序後鏈表為:\n");
sort(L, 1 );
output(L);
printf("降序排序後鏈表為:\n");
sort(L,-1);
output(L);
getchar();
}
『捌』 求數據結構試驗 線性表的順序存儲結構
#include<iostream.h>
#include<stdlib.h>
#include <malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
#define LIST_INIT_SIZE 100//線性表存儲空間的初始增量
#define LISTINCREMENT 10 // ?
typedef struct{
int * elem;// 存儲空間基址
int length;//當前長度
int listsize;//當前分配的存儲容量
}SqList;
SqList L;
int InitList_Sq(SqList & L){
//構造一個新的線性表。
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
if(!L.elem)exit(OVERFLOW);//存儲容量失敗
L.length=0; //空表長度為0
L.listsize=LIST_INIT_SIZE;//存儲初始容量
return OK;
}//InitList_Sq
int LIstInsert_Sq(SqList & L,int i,int e){
//在順序線性表L中第i位置之前插入新的元素e
if(i<1||i>L.length+1) return ERROR;
if(L.length>=L.listsize){
int * newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
int * q=&(L.elem[i-1]);
for(int * p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}
int ListDelete_Sq(SqList&L,int i,int &e)
{
if((i<1)||(i>L.length))return ERROR;
int *p=&(L.elem[i-1]);
e=*p;
int *q=L.elem+L.length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}
void main()
{
SqList L;
int i,n;
int e;
cout<<"輸入順序表的個數:"<<endl;
cin>>n;
int *p=(int *)malloc(n*sizeof(int));
InitList_Sq(L);
cout<<"輸入線性表"<<n<<"個元素的值"<<endl;
for(i=0;i<n;i++)
{
cin>>p[i];
L.elem[i]=p[i];
}
cout<<endl;
L.length=i;
cout<<endl;
cout<<"輸入要插入元素的值"<<endl;
cin>>e;
cout<<endl;
cout<<"輸入要插入的位置"<<endl;
cin>>i;
LIstInsert_Sq( L, i, e);
for(i=0;i<n+1;i++)
cout<<L.elem[i];
cout<<endl;
cout<<"輸入要刪除的位置"<<endl;
cin>>i;
ListDelete_Sq(L,i,e)
;for(i=0;i<n;i++)
cout<<L.elem[i];
free(p);
『玖』 C語言 查找演算法實現
#include
int main() {
int i,x,n,*result = NULL;
int a[10],low,high,mid;
scanf_s("%d",&n);
// 確保輸入的數據是非遞減的
for(i = 0 ; i < n && i < 10 ; i++) {
scanf_s("%d",&a[i]);
}
fflush(stdin); // 如果輸入的數組元素多於10個,則廢棄
scanf_s("%d",&x);
low = 0,high = n - 1;
while(low <= high) {
mid = (low + high) / 2;
if(x == a[mid]) {
result = &a[mid]; // 這里給出的是查找到該元素的指針
break;
}
else if(x < a[mid]) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
if(result != NULL) {
printf("%d\n",*result);
}
else {
printf("no result\n");
}
return 0;
}