當前位置:首頁 » 編程語言 » c語言查找數據結構

c語言查找數據結構

發布時間: 2022-07-13 00:09:38

1. c語言數據結構「查找」問題

#include <stdio.h>

int find(int* array, int size, int value)
{
int up = 0;
int left = 0;
int right = size - 1;
int mid,times = 0;
if(array[size-1] >= array[0]) up = 1;
while(left<=right)
{
mid = (left+right)>>1;
times ++;
if(array[mid] == value) break;
else if(array[mid] > value)
{
if(up)
right = mid - 1;
else left = mid + 1;
}
else if(up)
left = mid + 1;
else right = mid - 1;
}
printf("共比較%d次\n",times);
if(left <= right)
return mid;
else
return -1;
}

int main()
{
int array[20] = {100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5};
int q, answer;
while(scanf("%d",&q)==1)
{
answer = find(array,20,q);
if(answer > 0)
printf("位置: %d\n", answer);
else
printf("找不到\n");
}
}

2. C語言 數據結構

第一處:s->next=q->next;改為
s->next = p;
因前一句為q->next=s;
連起來相當於s->next = s;
這樣的鏈表是有一個環的,插入後再遍歷會導致死循環。
或者可以這樣把兩句倒過來寫:
s->next=q->next;
q->next=s;
兩種選一個。
第二處:
free(p);
插入一個節點無需free任何東西,因原有所有節點都需要保留。

3. 數據結構關於數據查找的代碼(一定要用C語言)

說些我的見解:
1)首先明確數據結構研究的對象:研究的是如何存儲、操作數據,樓主應該關心每種數據結構的數學模型,可以用在什麼場合,各種性能怎麼樣:例如增加數據,查找數據,刪除數據都要花多少時間與內存。
學完之後要知道每個實際情況該用什麼數據結構。如果能自己設計出來更適合實際需求的數據結構,那就強了。
2)C語言只是表現形式,不是核心:像著名的《演算法導論》描述數據結構用的都是偽代碼。真正學好C語言,只要理解數據結構的數學模型,就可以輕松寫出代碼。所以像這本書C語言代碼實現的部分,應該能翻譯成數學模型來看。熟練掌握一門語言是和計算機溝通的基礎。
3)本書使用了面向對象,即C++的一些思想,目的是以後可以直接用數據結構,而不必重寫代碼。Destory只是一些快捷方式,在具體環境中實現,這些結構是沒必要記的,應該根據需求樓主可以自己寫出來。其實很多語言都提供了這些數據結構的實現,C++里的叫STL。
總之:核心是數學模型,順便熟悉一下C語言,寫些比較大的程序時,可以把數據結構包裝成書上那樣一個大的結構,方便使用。最後,多寫程序是很有好處的,可以鍛煉上面所有的技能。
另外,虛機團上產品團購,超級便宜

4. c語言常見的數據結構有哪些

1、線性數據結構


元素之間一般存在元素之間存在一對一關系,是最常用的一類數據結構,典型的有:數組、棧、隊列和線性表。


2、樹形結構


結點間具有層次關系,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為“一對多”關系,常見類型有:樹、堆。


3、圖形結構


在圖形結構中,允許多個結點之間相關,稱為“多對多”關系。


(1)線性數據結構:元素之間一般存在元素之間存在一對一關系,是最常用的一類數據結構,典型的有:數組、棧、隊列和線性表


(2)樹形結構:結點間具有層次關系,每一層的一個結點能且只能和上一層的一個結點相關,但同時可以和下一層的多個結點相關,稱為“一對多”關系,常見類型有:樹、堆


(3)圖形結構:在圖形結構中,允許多個結點之間相關,稱為“多對多”關系

5. 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;
}
折半查找運行結果:
三、實驗總結:
該實驗使用了兩種查找數據的方法(順序查找和折半查找),這兩種方法的不同之處在於查找方式和過程不同,線性表的創建完全相同,程序較短,結果也一目瞭然。

6. C語言——數據結構(排序-查找)

#include<stdio.h>
#include<stdlib.h>
#define N 10
void shellpass(int a[], int n, int d)
{
int i,j,temp;
for(i=d;i<n;i++)
{
if(a[i]<a[i-d])
{
temp=a[i];
for(j=i-d;j>=0&&temp<a[j];j-=d)
a[j+d]=a[j];
a[j+d]=temp;
}
}
}
void shellsort(int a[], int n, int delta[], int t)
{
int i, j;
for(i=0; i<t; i++)
{
shellpass(a, n, delta[i]);

printf("第%d趟希爾排序,增量為%d,排序之後的結果\n",i+1,delta[i]);
for(j=0; j<n; j++)
{
printf("%d\t",a[j]);
}
printf("\n");
}
}
void main()
{
int n=N, a[N];
int b[3] = {5,3,1};
int i;
printf("輸入%d個數\n", n);
for(i=0;i<n;i++)
{
printf("第%d個數:\t",i+1);
scanf("%d",&a[i]);
}

shellsort(a, n, b, 3);
printf("最終希爾排序之後的結果\n");
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
printf("\n");
}

熱點內容
nginx訪問403 發布:2024-05-06 05:56:39 瀏覽:676
android上傳圖片參數 發布:2024-05-06 05:56:04 瀏覽:219
360控制上傳流量 發布:2024-05-06 05:38:11 瀏覽:998
幾代演算法 發布:2024-05-06 05:33:43 瀏覽:352
安卓怎麼查看iculd照片 發布:2024-05-06 05:18:24 瀏覽:90
shell腳本減法 發布:2024-05-06 05:18:22 瀏覽:352
中文解壓縮文件 發布:2024-05-06 05:13:24 瀏覽:196
android簡訊刪除 發布:2024-05-06 04:58:42 瀏覽:260
安卓手機236開發者選項在哪裡 發布:2024-05-06 04:11:13 瀏覽:260
sql過濾條件 發布:2024-05-06 04:05:18 瀏覽:563