(1) 从键盘上依次输入21、18、30、75、42、55、99、35、40,创建顺序表,并输出顺序表中的各元素值(自己编写)
(2) 分别在顺序表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出顺序表中的各元素值(参考代码)
(3) 查找值为10的元素,找到返回其位序,否则返回0(自己编写)
(4) 查找顺序表中的最大元素值并输出(自己编写)
(5) 对顺序表元素进行就地逆置并输出(自己编写)
(6) 删除顺序表中的第4个数据元素和第7个数据元素,给出删除成功或失败的信息,并输出顺序表中的各元素值(参考代码)
(7) 求顺序表中所有元素的平均值并输出(自己编写)
(8) 先清空顺序表,然后销毁顺序表(自己编写)
思考:如果插入、删除元素的位置是随机输入的,待插入的元素也是随机输入的,程序可以怎么改?
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define ok 1
#define error 0
typedef struct
{
int a[100];
int length;
}sqlist,*p;
p creatlist();
int ListDelete(p,int);
void ListInsert(p,int,int);
int LocateElem(p,int);
int MAX(p);
void oppsite(p);
void average(p);
void Clearlist(p);
int DestroyList(p);
int main ()
{ int e;
int i;
int j;
int i1;
int j3;
p top;
int s;
int j1;
int j2;
top=creatlist();
printf("请输入要在哪个位置插入第一个数(以XX,XX格式输入):");
scanf("%d",&i1);
scanf("%d",&j3);
ListInsert(top, i1, j3);
printf("请输入要在哪个位置插入第二个数(以XX,XX格式输入):");
scanf("%d",&i);
scanf("%d",&j);
ListInsert(top, i, j);
printf("请输入要查找的元素");
scanf("%d",&e);
s=LocateElem(top,e);
if(s!=0)
{printf("查找元素的值位置为:");
printf("%d",s);
}
else
printf("该元素不存在查找失败");
int y=MAX(top);
printf("最大元素为:");
printf("%d\n",y);
oppsite(top);
printf("请输入第一个要删除元素的位置");
scanf("%d",&j1);
int k=ListDelete(top,j1);
if(k)
printf("删除元素成功");
else
printf("删除元素失败");
printf("请输入第二个要删除元素的位置");
scanf("%d",&j2);
int k1=ListDelete(top,j2);
if(k1)
printf("删除元素成功");
else
printf("删除元素失败");
average(top);
Clearlist(top);
DestroyList(top);
}
p creatlist()
{
p d;
int k;
d=(p)(malloc(sizeof(sqlist)));
printf("你想要从键盘上输入几个数");
scanf("%d",&d->length);
if(d->length<=0)
{printf("你输入了负数或者0");
exit(-1);
}
for(k=0;k<d->length;k++)
{
printf("请输入第%d个数,按回车结束: ",k+1);
scanf("%d",&d->a[k]);
}
for(k=0;k<d->length;k++)
{
printf("第%d个数是",k+1);
printf("%d\n",d->a[k]);
}
printf("\n");
return d;
}
void ListInsert(p top,int i,int j)
{
if(top->length<=0)
{
printf("输入失败,长度不够");
exit(-1);
}
if(top->length>=100)
{
printf("插入失败,数目过溢");
exit(-1);
}
if(i>top->length)
{
printf("插入位置大于数组的最大长度");
exit(-1);
}
if(i<0)
{
printf("插入位置有误");
exit(-1);
}
int k;
for(k=top->length-1;k>=i;k--)
top->a[k+1]=top->a[k];
top->a[i]=j;
++top->length;
for(k=0;k<top->length;k++)
{
printf("输出第%d个数是:",k+1);
printf("%d\n",top->a[k]);
}
printf("输入成功\n");
}
int LocateElem(p top,int e)
{
int t=0;
for(;t<top->length;t++)
if(e==top->a[t])
return t+1;
if(top->length==t)
return error;
}
int MAX(p top)
{ int max=top->a[0];
for(int r=1;r<top->length;r++)
if(max<top->a[r])
max=top->a[r];
return max;
}
void oppsite(p top)
{
int b;
for(int k=0;k<(top->length/2);k++)
{b=top->a[k];
top->a[k]=top->a[top->length-1-k];
top->a[top->length-1-k]=b;
}
printf("逆序后的元素为\n");
for(int t=0;t<top->length;t++)
printf("%d\n",top->a[t]);
}
int ListDelete(p top,int i)
{
if(i>top->length||i<1)
{printf("删除位置不对,删除失败");
return error;
exit(-1);
}
else
{
int b;
for(int j=1;j<=top->length;j++)
{
b=top->a[i-1];
if(j==i&&i<top->length)
{
for(;j<top->length;j++)
top->a[j-1]=top->a[j];
--top->length;
printf("删除后的剩余元素是:\n");
for(int j=0;j<top->length;j++)
printf("%d\n",top->a[j]);
return ok;
}
}
}
}
void average(p top)
{
double s=0;
for(int j=0;j<top->length;j++)
//printf("%d",top->a[j]);
s+=top->a[j];
printf("%lf",s);
double b=s/10;
printf("顺序表中所有元素的平均数是:");
printf("%lf\n",b);
}
void Clearlist(p top)
{
for(int i=0;i<top->length;i++)
top->a[i]=NULL;
printf("清除顺序表元素成功");
}
int DestroyList(p top)
{
free(top); /*释放malloc(或calloc、realloc)函数给指针变量分配的内存空间的函数,使用后该指针变量一定要重新指向NULL,防止野指针出现,有效 规避误操作。
*/
printf("\n");
printf("该线性表已经被销毁");
exit(-1);
return error;
}