#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("This insert is illegal\n");
return;
} /*非法插入*/
for(t=*len-1;t>=i-1;t--)
Sqlist[t+1]=Sqlist[t];//插入位置之后的元素往后面推
Sqlist[i-1]=x; /*插入元素*/
*len=*len+1; /*表长加1*/
}
/** 向顺序表中删除元素 */
/** 参数Sqlist:表首地址 */
/** 参数*len: 表的长度 */
/** 参数i: 插入元素的位置 */
void DelElem(int Sqlist[],int *len,int i)
{
int j;
if(i<1 || i>*len)
{
printf("This insert is illegal");
return;
} /*非法插入*/
for(j=i;j<=*len-1;j++)
Sqlist[j-1]=Sqlist[j]; //将删除元素后面的元素往前移动
*len=*len-1; /*表长减1*/
}
/**测试函数*/
main()
{
/*按照题目要求进行测试*/
int Sqlist[MaxSize]; /*定义一个静态顺序表*/
int len;
int i;
for(i=0;i<6;i++)
scanf("%d",&Sqlist[i]); /*从键盘输入6个整数*/
len=6;
for(i=0;i<len;i++)
printf("%d ",Sqlist[i]); /*输出顺序表中的6个整数*/
printf("\nThe spare length is %d\n",MaxSize - len); /*显示表中的剩余空间*/
insertElem(Sqlist,&len,3,0); /*在表中第3位置插入整数0*/
for(i=0;i<len;i++)
printf("%d ",Sqlist[i]); /*输出顺序表中的所有元素*/
printf("\nThe spare length is %d\n",MaxSize - len); /*显示表中的剩余空间*/
insertElem(Sqlist,&len,11,0); /*在表中第11位置插入整数0*/
DelElem(Sqlist,&len,6); /*删除顺序表中的第6个元素*/
for(i=0;i<len;i++)
printf("%d ",Sqlist[i]); /*输出顺序表中的所有元素*/
printf("\nThe spare length is %d\n",MaxSize - len); /*显示表中的剩余空间*/
}
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define MaxSize 10
typedef int ElemType ; /*将int定义为ElemType*/
typedef struct{
int *elem;//元素
int length;//长度
int listsize; //内存
} Sqlist;
/** 初始化一个顺序表 */
/** 参数L:Sqlist类型的指针 */
void initSqlist(Sqlist *L){
L->elem=(int *)malloc(MaxSize*sizeof(ElemType));
if(!L->elem) exit(0);//没有创建成功
L->length=0;
L->listsize= MaxSize;
}
/** 向顺序表中插入元素 */
/** 参数L:Sqlist类型的指针 */
/** 参数i:插入元素的位置 */
/** 参数item:插入的元素 */
void InsertElem(Sqlist *L,int i,ElemType item){
/*向顺序表L中第i个位置上插入元素item*/
ElemType *base,* insertPtr,*p;
if(i<1||i>L->length+1) exit(0);//防止过量插入
if(L->length>=L->listsize)
{
base=(ElemType*)realloc(L->elem,(L->listsize+10)*sizeof(ElemType));//重新分配内存空间
L->elem=base;//传首地址
L->listsize=L->listsize+100;
}
insertPtr=&(L->elem[i-1]);//将要删除的地址赋值
for(p=&(L->elem[L->length-1]);p>= insertPtr;p--)//以地址来判断
*(p+1)=*p;//往后面移
* insertPtr=item;
L->length++;//长度增加
}
/** 从顺序表中删除元素 */
/** 参数L:Sqlist类型的指针 */
/** 参数i:删除元素的位置 */
void DelElem(Sqlist *L,int i) {
/*从顺序表L中删除第i个元素*/
ElemType *delItem, *q;
if(i<1||i>L->length) exit(0);//防止没有那个位置的删除
delItem=&(L->elem[i-1]);//穿要删除的地址
q=L->elem+L->length-1 ;//这里的-1没有理解非常深刻,后面是<=,那么这里的-1应该是可有可无的
for(++delItem; delItem<=q;++ delItem)*( delItem-1)=* delItem;//往前面移
L->length--;//长度减小
}
/** 测试函数 */
main()
{
Sqlist l;
int i;
initSqlist(&l); /*初始化一个顺序表*/
for(i=0;i<15;i++)
InsertElem(&l,i+1,i+1); /*向顺序表中插入1……15*/
printf("\nThe content of the list is\n");
for(i=0;i<l.length;i++)
printf("%d ",l.elem[i]);/*打印出顺序表中的内容*/
DelElem(&l,5); /*删除第5个元素,即5*/
printf("\nDelete the fifth element\n");
for(i=0;i<l.length;i++) /*打印出删除后的结果*/
printf("%d ",l.elem[i]);
getche();
}