BEIJING TIME:2025-3-10 21:49:24

数据结构C语言

#1.快速排序第一趟

查看代码
#include <stdio.h>

int main () { 
	int s[]={12,23,40,74,6,55,7,63,5}; 
	int head=0; 
	int slength=sizeof(s)/sizeof(s[0]); 
	int rear=slength; int key=s[0]; 
	int sign=head; printf("key=,%d\n初试s[]=",key);
	for(int i=0;i<slength;i++ ) 
		//遍历数组 
		printf(",%d" , s[i] ); 
	printf("head=%d,rear=%d\n",head,rear); 
	printf("第一次遍历结束\n"); 
	while(head<rear){ 
		if(s[rear]<key && sign==head){
			s[head]=s[rear];
			s[rear]=0;
			sign=rear;
			head++;
		}
		else if(s[rear]>key && sign==head) rear--; 
		else if(s[head]>key && sign==rear){ 
			s[rear]=s[head]; s[head]=0; sign=head; rear--; 
		} else{ continue; } 
		for(int i=0;i<slength;i++ ) 
			//遍历数组 printf("%d,",s[i] ); 
			printf("head=%d,rear=%d,sign=%d\n",head,rear,sign); 
	} 
	s[head]=key; 
	printf("%d\n",s[head]); 
	for(int i=0;i<slength;i++ ) 
		//遍历数组 
		printf(",%d" , s[i] ); 
	return 0; 
}

第二种方法

点击展开
 #include<stdio.h>
void quickpass(int r[],int s,int t){ 
	int i=s,j=t,x=r[s]; 
	int length=t; 
	while(i<j){ 
		while(i<j&&r[j]>x) 
			j--; 
		if(i<j){ r[i]=r[j]; i++; } 
		while(i<j&&r[i]<x) 
			i++; 
		if(i<j){ r[j]=r[i]; j--; } 
	} 
	r[j]=x; 
	printf("result="); 
	for(int i=0;i<=t;i++) 
		printf(",%d",r[i]); 
} 
int main () { 
	int r[]={12,23,40,74,6,55,7,63,5}; 
	int s=0; 
	int t=sizeof(r)/sizeof(r[0])-1; 
	quickpass(r,s,t); return 0; 
}

2.数组的折半查找 显示其位置和查找次数

数组折半查找-点击展开

#include <stdio.h>

int HalfCheck(int a[],int x,int n){
	int i=0,j=n-1,s,count=0;
	while(i<=j){
		if((i+j)%2==0)
			s=(i+j/2);
		else
			s=(i+j-1)/2;
        count++;
		if(a[s]==x){
			 printf("x的位置为%d",s);
             printf("查找次数为%d",count);
			return s;}
		 else if(a[s]<x)
			   i=s+1;
		     else j=s-1;
	}
	return 0;
}

int main()
{
	int a[]={1,3,6,7,9,11,17,19,23};
	int x=19;
	int n=sizeof(a)/sizeof(int);
	HalfCheck(a,x,n);
   return 0;
}

 

3.对含有n个互不相同元素的线性表。设计一个算法同时找最大元素和最小元素。

找最大元素和最小元素-点击展开
 #include <stdio.h>
//对含有n个互不相同元素的线性表。设计一个算法同时找最大元素和最小元素。
int Check(int a[],int n){
	int min=a[0];
	int max=a[0];
	for(int i=1;i<n;i++){
		if(max<a[i]) max=a[i];
		if(min>a[i])min=a[i];
	}
	printf("max%d\n",max);
	printf("min=%d\n",min);
	return max,min;
}

int main(){
	int a[]={9,6,8,45,4,7,23,34,7,45};
	int n=sizeof(a)/sizeof(int);
	Check(a,n);	
   return 0;
}

 

4.一组整数以顺序结构存储,设计讲所有偶数元素移动到所有奇数元素之前的算法。

顺序存储,偶在前,奇在后—点击展开
 #include <stdio.h>

int Move(int A[],int n){
	int i=0;
	int c=0;
	int j=n-1;
	while(c<=n-1){
		if(A[i]%2!=0){
			int key=A[i];
			while(i<=j){
				A[i]=A[i+1];
				i++;
			}
			A[i]=key;
			j--;
		}
		c++;
		i=c;
	}
	for(int i=0;i<n;i++){
		 printf("%d,",A[i]);
	}
	return 0;
}

int main()
{
	int A[]={11,2,3,4,5,6,7,8,9};
	int n=sizeof(A)/sizeof(int);
   Move(A,n);
   return 0;
}

 

5.设计在顺序存储的有序表中实现二分查找的算法

顺序存储实现二分查找—点击展开
 #include <stdio.h>

int Check(int A[],int n,int x){
	int i=0;
	
	int j=n;  
	int s;
	while(i<=j){
		if((i+j)%2==0)
			s=j/2;
		else
			s=(j-1)/2;
		if(A[s]==x)
			return s;//查找成功,位置为A[s]
		else if(A[s]>x)
			j=s-1;
		else 
			i=s+1;
	}
	for(int i=0;i<n;i++){
		 printf("%d,",A[i]);
	}
	return 0;
}

int main()
{
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
	int A[]={1,2,3,4,5,6,7};
	int x=6;
	int n=sizeof(A)/sizeof(int);
   Check(A,n,x);
   return 0;
}

6.n个元素采用顺序存储,设计直接插入排序算法

顺序存储,直接插入排序算法—点击展开
#include <stdio.h>

int Direct(int A[],int n){
	int p=0;
	int j=0;
	int i=0;
	p++;
	printf("i=%d\n",i);
	
	while(p<=n-1){
		if(A[p]<A[j]){
			i=j;
			while(j>=0 && A[p]<A[j]){
				A[j]=A[j+1];
				j--;
			}
		}
		A[j]=A[p];
		i++;
		j=i;
		p++;
	}
	
	for(int i=0;i<n;i++){
		 printf("%d,",A[i]);
	}
	return 0;
}

int main()
{
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
	int A[]={1,5,3,4,2};
	int x=6;
	int n=sizeof(A)/sizeof(int);
   Direct(A,n);
   return 0;
}

 

7.单链表中x值个数统计

单链表中x值个数统计【1】
 #include "stdio.h"
#include "stdlib.h"


typedef struct LinkList {
    int data;      /* 数据          */
    struct LinkList *next;
} LinkList;


/* 建立一个带头结点的单链表,头插法 */
void Build ( LinkList *L, int array[], int array_length ) {
    int n = array_length;
    LinkList *q, *p;
    /* 建立头结点 */
    L->next = NULL;
    L->data = -1;
    while ( n ) { /* 向链表中插入数据 */
        int insert_num = array[array_length - n];
		q = ( LinkList *) malloc ( sizeof ( LinkList ) );
		q->data = insert_num;
		q->next = L->next;
		L->next = q;
        n--;
    }
}

/* 输出单链表中的信息 */
void Print ( LinkList *L ) {
    LinkList *p;
    p = L->next;
    while ( p ) {
        printf ( "[%d]\t", p->data );
        p = p->next;
    }
}
/*单链表中x值个数统计*/
int CountX( LinkList *HL,int x){
	int c=0;
	LinkList *p=HL->next;
	while(p){
		if(p->data==x) c++;
		p=p->next;
	}
	printf ( "\n给定值x(%d)的结点数:%d\n",x,c );
	return c;
}

int main () {
	int array[] = {1, 2, 5, 6, 5, 1, 4, 7, 9, 8, 7, 2, 2,4}; /* 插入的数据 */
	int array_length =sizeof(array) / sizeof(array[0]);
    LinkList *L, *p;
    L = ( LinkList *) malloc ( sizeof (LinkList ) );
    Build ( L, array, array_length );
    Print (L);
	CountX(L,2);
    return 0;
}
posted @   天基系统  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示