赞
踩
题目:
已知一个顺序表L,其中元素递增有序,设计一个算法,插入一个元素x后仍保持该顺序表递增有序;然后再删除q数组下标的值,并把删除的值赋值给e。
思路:
代码如下:
- #include <stdio.h>
- typedef struct //定义一个顺序表
- {
- int data[20];
- int length;
-
- }sqlist;
- void inilist(sqlist &l)//初始化顺序表
- {
- for(int i=0;i<20;i++)
- l.data[i]=0;
- l.length=0;
- }
-
- int findx(sqlist &l,int x)//查找出需要插入的位置
- {
- int i;
- for(i=0;i<l.length;i++)
- {
- if(x<l.data[i])
- return i;//返回该位置,即数组下标
- }
- return i;
- }
- //插入操作
- void insert(sqlist &l,int n,int x)//顺序表l内部发生变化,因此需要&符号,引用l。
- {
- for(int i=l.length-1;i>=n;i--)
- {
- l.data[i+1]=l.data[i];//因为n为需要插入的数组下标,所以,当前队尾元素为i-1,从队尾往前一个一个移动
- }
- l.data[n]=x;
- l.length++;
- }
- int deletel(sqlist &l,int q,int &e)//只要函数内改变,且返回后我需要用变量,都需要加上&符号
- {
- if(q<0||q>=l.length)
- return 0;
- e=l.data[q];
- for(int i=q;i<l.length;i++)
- {
- l.data[i]=l.data[i+1];
- }
- l.length--;
- return 1;
- }
- int main()
- {
- sqlist l;
- inilist(l);//初始化顺序表
- //添加数据元素
- printf("请先给原始数组赋值,输入8个数值,要保持有序递增哈\n");
- for(int p=0;p<8;p++)
- {
- scanf("%d",&l.data[p]);
- l.length++;
- }
-
- printf("请输入想插入的数字\n");
- int x;
- scanf("%d",&x);
- //查找需要返回的数组下标
- int n=findx(l,x);
- //进行插入操作
- insert(l,n,x);
- //输出验证
- for(int i=0;i<l.length;i++)
- {
- printf("%d ",l.data[i]);
- }
- printf("你想删除哪个位置的元素\n");
- int q;
- scanf("%d",&q);
- int e;
- int f=deletel(l,q,e);
- printf("e=%d",e);
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。