c語言簡單排序與查找練習,c語言順序表的查找

本文目錄一覽:

數據結構編程–查找與排序 題

#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; ipos; 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 ( length0 )

{

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; ilength; i++ )

{

for( int j=1; jlength; 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();

}

(求救)用C語言編寫——排序查找,題目如下。

#include stdio.h

#define N 3 //這句話的意思是N等於10(後面的19是可以改成任意的數,來表示學生的人數)

void main()

{

void paixu(int a[N]);

void chazhao(int a[N],int x);

int i,score;

//printf(“請輸入學生的人數:”);

//scanf(“%d”,N);

int a[N];

printf(“請依次輸入學生成績:”);

for(i=0;i=N-1;i++)

{

scanf(“%d”,a[i]);

}

paixu(a);//調用排序的函數

printf(“請輸入您要查找的成績:”);

scanf(“%d”,score);

chazhao(a,score);

}

void paixu(int a[N])

{

int t,i,j;

for(i=0;iN-1;i++)

{

for(j=i+1;j=N-1;j++)

{

if(a[i]a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0;i=N-1;i++)

{

printf(“學生的成績第%d名為:%d\n”,i+1,a[i]);

}

}

void chazhao(int a[N],int x)

{

int b=0,i;

for(i=0;i=N-1;i++)

{

if(a[i]==x)

{

printf(“這個成績是第%d名\n”,i+1);

b=1;

break;

}

}

if(b==0)

printf(“no this score!\n”);

}

謝謝啦、、、、、、

c語言排序和查找?

1)利用readData()函數從data1.txt中讀入不同規模的數據存入數組,

編寫基於數組的順序查找演算法,測試數據量為1萬、5萬、10萬、20萬、

30萬、40萬和50萬時的數據查詢時間。

演算法代碼如下:

1 int seqsearch(int a[],int n,int key)

2 {

3 int k=n-1;

4 while(k=0a[k]!=key)

5 k–;

6 return (k);

7 }

2)利用readData()函數從data2.txt中讀入不同規模的有序數據存入數組,

編寫基於數組的二分查找演算法,測試數據量為1萬、5萬、10萬、20萬、30萬、

40萬和50萬時的數據查詢時間。

演算法代碼如下:

1 int binSearch(int a[],int n,int key)

2 {

3 int low=0;

4 int high=n-1;

5 int mid;

6 while(low=high)

7 {

8 mid=(low+high)/2;

9 if(a[mid]==key) return mid;

10 if(a[mid]key)

11 high=mid-1;

12 else

13 low=mid+1;

14 }

15 return -1;

16 }

3)請設計冒泡排序演算法函數void bubbleSort(int a[],int n),對a[1]..a[n]進行升序排序。

並測試在不同數據規模下的排序效率。

演算法代碼如下:

1 void bubbleSort(int a[],int n)

2 {

3 int i=1,j,flag=1;

4 while(i=n-1flag)

5 {

6 flag=0;

7 for(j=1;j=n-1-i;j++)

8 if(a[j+1]a[j])

9 {

10 a[0]=a[j];

11 a[j]=a[j+1];

12 a[j+1]=a[0];

13 flag=1;

14 }

15 i++;

16 }

17 }

原創文章,作者:FRLEV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317957.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
FRLEV的頭像FRLEV
上一篇 2025-01-11 16:28
下一篇 2025-01-11 16:28

相關推薦

  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28

發表回復

登錄後才能評論