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/n/317957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
FRLEVFRLEV
上一篇 2025-01-11 16:28
下一篇 2025-01-11 16:28

相关推荐

  • Python简单数学计算

    本文将从多个方面介绍Python的简单数学计算,包括基础运算符、函数、库以及实际应用场景。 一、基础运算符 Python提供了基础的算术运算符,包括加(+)、减(-)、乘(*)、除…

    编程 2025-04-29
  • 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
  • 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

发表回复

登录后才能评论