我写了一个完整的。程序试运行正常。运行效果如下图。
希望对您有帮助!
#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语言编写顺序查找和二分查找(折半查找)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)