数据结构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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律