求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢

求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢,第1张

我写了一个完整的。程序试运行正常。运行效果如下图。

希望对您有帮助!

#include"stdioh"

#include "stdlibh"

int charu(int a[])

{

int n,i=0;

while(a[i]!=0)

i++;

printf("\n该数列长度为%d。\n",i);

printf("请输入要插入元素位置n(n<=%d)(在第%d位插入即在末尾增加一个元素):\n",i+1,i+1);

while(1)

{

scanf("%d",&n);

if(n>=1&&n<=i+1)

break;

printf("请输入0-%d以内的数字:\n",i+1);

}

for(i=i-1;i>=n-1;i--)

a[i+1]=a[i];

printf("请输入要添加的数:\n");

scanf("%d",&a[n-1]);

printf("新数列为:\n");

for(i=0;a[i]!=0;i++)

printf("%d\t",a[i]);

return a[20];

}

void chazhao1(int a[])/顺序查找/

{

int n=0,num;

printf("请输入要查找的数:\n");

scanf("%d",&num);

for(int i=0;a[i]!=0;i++)

if(a[i]==num)

{

printf("第%d位为%d。\n",i,num);

n=n+1;

}

if(n==0)

printf("没找到该数!\n");

}

void chazhao2(int a[])/折半查找/

{

int num,set=0,end=0,i;

while(a[end]!=0)

end++;

end=end-1;

i=(set+end)/2;

printf("请输入要查找的数:\n");

scanf("%d",&num);

while(set<=end)

{

if(a[i]>num)

end=i-1;

else

if(a[i]<num)

set=i+1;

else break;

i=(set+end)/2;

}

if(set>end)

printf("没找到该数!\n");

else

printf("第%d位为%d。\n",i+1,num);

}

int paixu1(int a[])

{

int n=0;

for(int i=0;a[i]!=0;i++)

n=n+1;

for(i=1;i<n;i++)

{

for(int j=0;j<n-i;j++)

{

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

{

int t;

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

}

}

}

printf("排序后的数列为:\n");

for(i=0;a[i]!=0;i++)

printf("%d\t",a[i]);

return a[20];

}

int paixu2(int a[])

{

int n=0;

for(int i=0;a[i]!=0;i++)

n=n+1;

int min;

for(i=0;i<n-1;i++)

{

min=i;

for(int j=i+1;j<n;j++)

if(a[j]<a[min])

min=j;

if(min!=i)

{

int t;

t=a[i];a[i]=a[min];a[min]=t;

}

}

printf("排序后的数列为:\n");

for(i=0;a[i]!=0;i++)

printf("%d\t",a[i]);

return a[20];

}

void xianshi(int a[])

{

for(int i=0;a[i]!=0;i++)

printf("%d\t",a[i]);

}

void screen()

{

printf("\n请选择:\n");

printf("1显示所有数\n");

printf("2插入一个数\n");

printf("3顺序查找一个数\n");

printf("4冒泡排序\n");

printf("5选择排序\n");

printf("6折半查找一个数(注意:折半查找只能在排序后使用)\n");

printf("7退出程序\n");

}

void main()

{

int a[20]={21,23,14,5,56,17,31,85,72};

int i;

printf("原数列为:\n");

for(i=0;a[i]!=0;i++)

printf("%d\t",a[i]);

printf("\n该数列长度为%d。\n",i);

int c;

while(1)

{

screen();

scanf("%d",&c);

switch (c)

{

case 1:xianshi(a);break;

case 2:a[20]=charu(a);break;

case 3:chazhao1(a);break;

case 4:a[20]=paixu1(a);break;

case 5:a[20]=paixu2(a);break;

case 6:chazhao2(a);break;

case 7:exit(0);

default :printf("输入的数字错误。\n请重新输入:\n");

}

continue;

}

}

#include<stdioh>

#include<stdlibh>

#define Size 50

//定义顺序表结构体类型

typedef struct Table{

inthead;//顺序表头指针,为整型

int length;//顺序表中元素个数

int size; //顺序表的长度

}Table;

//创建顺序表

Table CreateTable(){

Table T;

if(!(Thead=(int)malloc(Sizesizeof(int)))){

printf("内存分配错误!\n");

exit(0);

}

Tsize=Size;

Tlength=0;

return T;

}

//增加

void Insert(Table T,int set,int values)//set为插入的位置,values为值

{

//首先判断插入位置是否正确

if(set<0||set>Tlength){

printf("插入位置不正确!\n");

reutrn;

}

//判断是否有足够的内存空间存储增加的数

if(Tlength==Tsize){

if(!(Thead=(int)realloc(Thead,(Tsize+10)sizeof(int)))){

printf("内存分配错误!\n");

exit(0);

}

Tsize+=10;

}

//插入数据

for(int i=slength;i>set;i--)

Thead[i]=Thead[i-1];

Thead[set]=values;

Tlength++;

}

//删除

void Delete(Tabel T,int set)

{

if(set<0||set>=Tlength)

{

printf("删除数的位置不争确,删除失败!\n");

return;

}

//输出数据

for(int i=set;i<slength;i++)

Thead[i]=Thead[i+1];

Tlength--;

}

//查找

int Search(Tabel T,int value)

{

for(int i=0;i<Tlength;i++)

if(Thead[i]==value)

return i;

return -1;

}

有问题的话自己改一下,没调试。

顺序查找:在一个已知无序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。复杂度为o(n)

二分查找又称折半查找,它是一种效率较高的查找方法。

二分查找要求:1必须采用顺序存储结构 2必须按关键字大小有序排列。

优缺点折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

算法思想首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。

重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

算法复杂度假设其数组长度为n,其算法复杂度为o(log(n))

#include <stdioh>

//二分查找:

int search(int a[],int x,int n) //x为要查找的元素,n为数组长度

{

int mid=0;

int low=0;

int high=n;

while(low<=high)

{

mid=(low+high)/2;

if(a[mid]==x)

{ return mid; }

else if(x<a[mid])

{ high=mid-1; }

else

{ low=high+1; }

}

return -1;

}

//顺序查找:

int search1(int a[],int x,int n) //x为要查找的元素,n为数组长度

{

int i;

for(i=0;i<n;i++)

{

if(a[i]==x)

return i;

}

return -1;

}

int main()

{

int i,a[10],x;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

printf("请输入要查找的元素");

scanf("%d",&x);

if(search(a,x,10)!=-1)printf("查找的元素在数组中的位置为%d\n",search(a,x,10));

else printf("该元素不在数组中\n");

if(search1(a,x,10)!=-1)printf("查找的元素在数组中的位置为%d\n",search1(a,x,10));

else printf("该元素不在数组中\n");

return 0;

}

二分查找:

int search(int a[],int x,int n)

{

int mid=0;

int low=0;

int high=n;

while(low<=high)

{

mid=(low+high)/2;

if(a[mid]==x)

{ return mid; }

else if(x<a[mid])

{ high=mid-1; }

else

{ low=high+1; }

}

return -1;

}

顺序查找:

int search(int a[],int x,int n)

{

int i;

for(i=0;i<n;i++)

{

if(a[i]==x)

return i;

else

return -1;

}

}

在一个有n个元素的数组中实现顺序查找值为X的元素的代码如下:

for(i=0;i<n;i++)

if(a[i]==x)break;

if(i<n)printf("%d是第%d个元素",x,i);

else printf("未找到");

以上就是关于求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢全部的内容,包括:求高人帮编一个有关顺序表的C语言程序,望速回,非常感谢、C语言编写一个顺序表程序,要求:完成创建、增加、删除、查找。、用C语言编写顺序查找和二分查找(折半查找)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10214641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存