哪位大佬帮帮忙,求速度!!!设计一个算法,将某一个X值插入到一个有序(运用顺序存储结构),对线性表进
2个回答
展开全部
#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000
typedef struct
{
int data[maxsize];
int last;
}Seqlist;
void CreateFormtail(Seqlist *L);
void InsertX(Seqlist *L);
void Print(Seqlist *L);
void Choose(int choice,Seqlist *L);
int main(void)
{
Seqlist L;
Seqlist *p;
p=&L;
L.last=-1;//必须初始化后使用!!
while(1)
{
Print(p);
}
//CreatFormtail(p);
//以下代码仅供调试使用
//int i;
//for(i=0;i<=L.last;i++)
//{
// printf("%d ",L.data[i]);
//}
//printf("\n");
//InsertX(p);
return 0;
}
//尾插法建表
void CreateFormtail(Seqlist *L)
{
int n;
int i;
//printf("请输入顺序表长度:");
//scanf("%d",&n);
while(1)
{
printf("请输入顺序表长度:");
scanf("%d",&n);
if(n>0)
{
break;
}
else
{
printf("Error:顺序表的长度必须大于零!\n");
}
}
//printf("请输入递增顺序表元素:\n");
//L->last=n-1;
//for(i=0;i<n;i++)
//{
// scanf("%d",&L->data[i]);
//}
while(true)
{
printf("请输入递增顺序表元素:\n");
L->last=n-1;
for(i=0;i<n;i++)
{
scanf("%d",&L->data[i]);
}
for(i=1;i<n;i++)
{
if(L->data[i]>=L->data[i-1]);
else
{
break;
}
}
if(i>=n)
{
break;
}
else
{
printf("Error:顺序表的元素必须为递增!\n");
}
}
}
void InsertX(Seqlist *L)
{
int x;
int i;
printf("请输入要插入的整数元素X:");
scanf("%d",&x);
for(i=L->last;i>=0;i--)
{
if(x<=L->data[i])
{
L->data[i+1]=L->data[i];
}
else
{
L->data[i+1]=x;
break;
}
if(i==0)
{
L->data[i]=x;
}
else;
}
L->last++;
//输出新表
printf("输出新表:\n");
for(i=0;i<=L->last;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
}
void Print(Seqlist *L)
{
int choice;
printf("1.建立新的递增顺序表。\n");
printf("2.插入一个新元素。\n");
printf("3.按其它任意键退出。\n");
printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice,L);
}
void Choose(int choice,Seqlist *L)
{
switch(choice)
{
case 1:
CreateFormtail(L);
break;
case 2:
InsertX(L);
break;
default:
exit(0);
}
}
这是插入程序,查找程序你自己添加吧
使用for语句遍历顺序表,嵌套if(i%2==0)语句查找。
#include<stdlib.h>
#define maxsize 1000
typedef struct
{
int data[maxsize];
int last;
}Seqlist;
void CreateFormtail(Seqlist *L);
void InsertX(Seqlist *L);
void Print(Seqlist *L);
void Choose(int choice,Seqlist *L);
int main(void)
{
Seqlist L;
Seqlist *p;
p=&L;
L.last=-1;//必须初始化后使用!!
while(1)
{
Print(p);
}
//CreatFormtail(p);
//以下代码仅供调试使用
//int i;
//for(i=0;i<=L.last;i++)
//{
// printf("%d ",L.data[i]);
//}
//printf("\n");
//InsertX(p);
return 0;
}
//尾插法建表
void CreateFormtail(Seqlist *L)
{
int n;
int i;
//printf("请输入顺序表长度:");
//scanf("%d",&n);
while(1)
{
printf("请输入顺序表长度:");
scanf("%d",&n);
if(n>0)
{
break;
}
else
{
printf("Error:顺序表的长度必须大于零!\n");
}
}
//printf("请输入递增顺序表元素:\n");
//L->last=n-1;
//for(i=0;i<n;i++)
//{
// scanf("%d",&L->data[i]);
//}
while(true)
{
printf("请输入递增顺序表元素:\n");
L->last=n-1;
for(i=0;i<n;i++)
{
scanf("%d",&L->data[i]);
}
for(i=1;i<n;i++)
{
if(L->data[i]>=L->data[i-1]);
else
{
break;
}
}
if(i>=n)
{
break;
}
else
{
printf("Error:顺序表的元素必须为递增!\n");
}
}
}
void InsertX(Seqlist *L)
{
int x;
int i;
printf("请输入要插入的整数元素X:");
scanf("%d",&x);
for(i=L->last;i>=0;i--)
{
if(x<=L->data[i])
{
L->data[i+1]=L->data[i];
}
else
{
L->data[i+1]=x;
break;
}
if(i==0)
{
L->data[i]=x;
}
else;
}
L->last++;
//输出新表
printf("输出新表:\n");
for(i=0;i<=L->last;i++)
{
printf("%d ",L->data[i]);
}
printf("\n");
}
void Print(Seqlist *L)
{
int choice;
printf("1.建立新的递增顺序表。\n");
printf("2.插入一个新元素。\n");
printf("3.按其它任意键退出。\n");
printf("请选择你要的操作:");
scanf("%d",&choice);
Choose(choice,L);
}
void Choose(int choice,Seqlist *L)
{
switch(choice)
{
case 1:
CreateFormtail(L);
break;
case 2:
InsertX(L);
break;
default:
exit(0);
}
}
这是插入程序,查找程序你自己添加吧
使用for语句遍历顺序表,嵌套if(i%2==0)语句查找。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/*
参数:
1.数组arr,从小到大有序
2.数组长度为len
3.要插入的元素X
返回值:
若为1,则插入成功
若为0,则插入失败
*/
int insert(int arr[],int len,int X)
{
int i =0;
if(len < 1|| arr == NULL) return 0;
for(i = len-1;i >= 0;i --)
{
if(X < arr[i])
{
arr[i+1] = arr[i];//比X大的元素往后移动
}
else
{
arr[i] = X;
break;
}
}
return 1;
}
/*
参数:
1.数组arr,从小到大有序
2.数组长度为len
返回值:
若为1,则替换成功
若为0,则替换失败
*/
int search_replace(int arr[],int len)
{
int i =0;
if(len < 1|| arr == NULL) return 0;
for(i = len-1;i >= 0;i --)
{
if(arr[i] % 2 ==0)
{
arr[i] = 0;//替换为0
}
}
return 1;
}
参数:
1.数组arr,从小到大有序
2.数组长度为len
3.要插入的元素X
返回值:
若为1,则插入成功
若为0,则插入失败
*/
int insert(int arr[],int len,int X)
{
int i =0;
if(len < 1|| arr == NULL) return 0;
for(i = len-1;i >= 0;i --)
{
if(X < arr[i])
{
arr[i+1] = arr[i];//比X大的元素往后移动
}
else
{
arr[i] = X;
break;
}
}
return 1;
}
/*
参数:
1.数组arr,从小到大有序
2.数组长度为len
返回值:
若为1,则替换成功
若为0,则替换失败
*/
int search_replace(int arr[],int len)
{
int i =0;
if(len < 1|| arr == NULL) return 0;
for(i = len-1;i >= 0;i --)
{
if(arr[i] % 2 ==0)
{
arr[i] = 0;//替换为0
}
}
return 1;
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询