线性表的插入,删除,修改

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf("%d",&i);
desl(v,m, n,i); /*调用线性表元素删除函数*/
printf("输出操作后线性表:");
output(v,*n); /*调用线性表输出函数*/
printf("\n");
printf("请输入要查找的元素:");
scanf("%d",&x);
printf("\n");
printf("%d",*(v+i)); /*指针移动指向下一个节点依次输出元素*/
}
serch(int*v,intn,intx)
{intk;
k=0;
while ((k<n)&&(v[k]=!x)) k=k+1;
if (k==n) k=-1;
return(k);
}
bserch(int*v,intn,intx)
qksort1(p,i+1,n); /*对后子表进行快速排序*/
}
return;
}
intsplit(p,m,n) /*返回分界线位置*/
intm,n; p[];
{inti,j,k,u;t;
i=m; j=n;k=(i+j)/2;
if ((p[i]>=p[j])&&(p[j]>=p[k])) u=j; /*选取一个元素*/
printf("请输入线性表容量:");
scanf("%d",&m);
v=inistl(m,n); /*调用创建线性表函数*/
printf("请输入线性表实际个数:");
scanf("%d",n);
printf("请输入线性表起始元素:");
input(v,*n); /*调用线性表元素输入函数*/
printf("请输入线性表插入点位置:");
scanf("%d",&i);
printf("请输入线性表插入元素:");
scanf("%d",&b);
insl(v,m,n,i,b); /*调用线性表插入函数*/
printf("输出操作后线性表:");
output(v,*n); /*调用线性表输出函数*/
printf("\n");
printf("请输入线性表删除点位置:");
{
intj;
if(*n>=m) /*检查是否链表溢出*/
{printf("the stack is overflow\n");
return;
}
if(i>*n-1)i=*n+1; /*若插入点大于元素位置则在表的结束插入*/
if(i<1)i=1; /*空表在首部插入元素*/
for(j=*n;j>=i;j--) /*首位之间任意位置的插入*/
v[j]=v[j-1];
v[i-1]=b;
*n=*n+1; /*插入后元素统计指针加1*/
}
voiddesl(int*v,intm,int*n,inti) /*线性表删除函数*/
{intj;
if(*n==0) /*判断线性表是否为空*/
{printf("the stack is underflow\n ");
#include"stdio.h"
#include"stdlib.h"
int*inistl(intm,int*n) /*建立线性表函数*/
{int*v=NULL;
v=malloc(m*sizeof(int*)); /*创建链表,并把首地址赋给指针V*/
n=0;
return v;
}
voidinsl(int*v,intm,int*n,inti,intb)/*在链表指定位置插入元素b*/
else if ((p[i]>=p[k])&&(p[k]>=p[j])) u=k;
else u=i;
t=p[u]; p[u]=p[i];
while (i!=j)
{ while ((i<j)&&(p[j]>=t)) j=j-1;
if (i<j){ p[i]=p[j];i=i+1;
while ((i<j)&&(p[i]<=t))i=i+1;
if (v[i-1]>v[i]) /*发现逆序进行交换*/
{d=v[i];v[i]=v[i-1];v[i-1]=d;k=i;}
}
return;
}
qksort1(p,m,n)
intm,n;p[];
{
inti;if(n>m) /*子表不空*/
{
i=split(p,m,n); /*分割*/
qksort1(p,m,i-1); /*对前子表进行快速排序*/
return;
}
void input(int*v,intn) /*空表起始输入元素函数*/
{inti;
for(i=0;i<n;i++) /*利用循环指针输入元素*/
scanf("%d",v+i);
}
void output(int*v,intn) /*线性表输出打印函数*/
{inti;
for(i=0;i<n;i++)
{inti,j,k;
i=1; j=n;
while (i<=j)
{ k=(i+j)/2;
if (v[k-1Leabharlann Baidu==x) return(k-1);
if (v[k-1]>x) j=k-1;
elsei=k+1;
}
return(-1);
}
bubsort(v,n)intn;v[];
{intm,k,j,i, d; k=0;
if (i<j)
{p[j]=p[i]; j=j-1;}
}
}
p[i]=t;
return(i);
}
void main() /*主函数(功能调用函数)*/
{int*v,m,*n,i,b,x,y,k; /*v链表空间首地址m线性表容量n线性表实际元素i改变线性表元素位置b插入或删除元素*/
n=(int*)malloc(sizeof(int)); /*开辟链表空间*/
printf("please put choose 1 is search 2 isbsearch\n");
scanf("%d",&y);
switch(y)
{case 1:k=serch(v,*n,x);
case 2:k=bserch(v,*n,x);
}
if(k==-1)
printf("not find the element in line!\n");
elseprintf("the element in the line is %d\n",++k);
}
m=n-1; while (k<m) /*子表未空*/
{ j=m-1; m=0;
for(i=k;i<=j;i++) /*从前往后扫描*/
if (v[i]>v[i+1]) /*发现逆序进行交换*/
{d=v[i];v[i]=p[i+1];v[i+1]=d;m=i;}
j=k+1; k=0;
for (i=m;i>=j;i--) /*从后往前扫描*/
return;
}
if((i<1)||(i>*n)) /*删除点在首部以前和尾部以后特殊情况排除*/
{printf("not this element in the list!\n");
return;
}
for (j=i;j<=*n-1;j++) /*在允许位置做删除操作*/
v[j-1]=v[j];
*n=*n-1; /*元素统计指针减1*/
相关文档
最新文档