顺序表
创建一个静态的顺序表存放整数,大小为10
1.输入6个整数,打印出顺序表的内容,并且显示表中剩余的空间个数
2.在顺序表的第三个位置插入元素0,打印表内容,并且显示表中剩余的空间个数
3.在试图向表中的第十一个位置插入整数0,并且显示超出范围
4.删除表中的第六个元素,打印出顺序表中的内容,并且显示表中剩余的空间个数
/** 创建一个静态的顺序表存放整数,大小为10*/
/**1.输入6个整数,打印出顺序表的内容,并且显示表中剩余的空间个数*/
/** 2.在顺序表的第三个位置插入元素0,打印表内容,并且显示表中剩余的空间个数*/
/**3.在试图向表中的第十一个位置插入整数0,并且显示超出范围*/
/**4.删除表中的第六个元素,打印出顺序表中的内容,并且显示表中剩余的空间个数*/
#include "stdio.h"
#define MaxSize 10
/** 向顺序表中插入元素 */
/**参数Sqlist:表首地址 */
/**参数*len:表的长度 */
/**参数i:插入元素的位置*/
/**参数x:待插入的元素值 */
void insertElem(int Sqlist[],int *len ,int i,int x)
{
int t;
if(*len==MaxSize||i<1||i>*len+1)
{
printf("这个插入的位置不合法\n");
return;
}
for (t=*len-1;t>=i-1;t--)
Sqlist[t+1]=Sqlist[t]; //将i之后的元素都向后移动一个位置
Sqlist[i-1]=x; //插入元素
*len=*len+1; //表长加一
}
void DelElem(int Sqlist[],int *len,int i)
{
int j;
if(i<1 || i>len)
{
printf("这个删除的位置不合法\n");
return;
}
for (j=i;j<=*len-1;j++)
Sqlist[j-1]=Sqlist[j];
*len=*len-1;
}
/**测试函数*/
int main(){
int Sqlist[MaxSize];
int len;
int i;
printf("请输入六个整数\n");
for(i=0;i<6;i++){
scanf("%d",&Sqlist[i]); /*从键盘读入6整数*/
len=6;}
for(i=0;i<len;i++)
{
printf("%d\t",Sqlist[i]);
}
printf("\n 表中的剩余空间:%d然后在3的位置插入2\n",MaxSize-len);
insertElem(Sqlist,&len,3,2);
printf("------------------------------------------------\n");
for(i=0;i<len;i++)
printf("%d\t",Sqlist[i]);
printf("表中的空间为%d然后在11的位置插入2\n",MaxSize-len);
insertElem(Sqlist,&len,11,2);
for(i=0;i<len;i++)
printf("%d\t",Sqlist[i]);
DelElem(Sqlist,&len,5);
printf("删除后\n");
for(i=0;i<len;i++)
printf("%d\t",Sqlist[i]);
printf("剩余的空间为:%d",MaxSize-len);
}
**注意**:
1.
* 是指针运算符,可以表示一个变量是指针类型;也可以表示一个指针变量的所指向的存储单元,可以获取某个地址存储的值。
& 是取地址符号,取得某一个变量的地址
-------------------------------滑稽的分割线------------------------
> (一)在定义时,* 是一个标识符,声明该变量是一个指针,比如说int *p; 那p就是一个指向int型的指针;
在调用时,
(1)*p是指指针p指向的那个变量,比如说之前有int a=5;int *p=a;那么p的值是a的地址,也就是指针p指向a,*p则等于a的值,即*p=5。
(2)&,则是引用,比如说有定义int a=5;再定义int b=&a;那么这里的b则引用a的值,即b=5,而再给b赋值:b=10,a的值也会变为10。
(二)函数定义里的参数*和&的区别:
先定义有int x=0;和int *p=x;
1、若定义函数: void fun_1(int a){ a=5;} , 则调用:fun_1(x); 之后,x还等于0;因为fun_1函数只改变了形参a的值,a只是fun_1函数里的局部变量,调用fun_1(x)相当于是“a=x;a=5;”,x没变;
2、若定义函数:void fun_2(int &a){ a=5;} , 则调用:fun_2(x); 之后,x等于5;因为这里的a引用了x的值;
3、若定义函数:void fun_3(int *a){ *a=5;} , 则调用:fun_3(p); 之后,x也等于5;因为fun_3函数的参数a是一个指针,相当于a=p;*a则与*p指向同一地址,改变*a即改变*p即x
[分割线这部分引用](http://blog.csdn.net/qq_15037231/article/details/51901196)
------------------------傲娇的分割线------------------------------