您的位置:

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 }