静态顺序表
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/JK-HYJ/p/6807132.html
定义一张顺序表也就是在内存中开辟一段连续的存储空间,并给它一个名字进行标识。
A
0000H
0001H
……
如上图所示,A是其唯一的名称标识,右边的是其内存空间地址(其间隔由数据的存储类型决定)。
静态定义一张顺序表的方法如下:
#define MaxSize 100 ElemType Sqlist[MaxSize]; int len;
ElemType是指定顺序表的类型,len为顺序表的长度。有时候为了方便也可以直接定义,如下:
int a[100];
顺序表的插入元素的思想是:将元素插入在表中的第i个位置,第i个以及i个位置之后的元素一次向后移动一位。代码如下:
/*静态顺序表的各种操作 ** **向顺序表中插入元素 **参数Sqlist:表首地址 **参数*len:表的长度 **参数i:插入元素的位置 从1开始 **参数x:待插入的元素值 */ void insertElem(int Sqlist[],int *len,int i,int x) { int t; if(*len==MaxSize || i<1 || i>*len+1) { printf("This insertnis illegal \n"); return; } /*非法插入*/ for(t=*len-1;t>=i-1;t--) Sqlist[t+1]=Sqlist[t]; Sqlist[i-1]=x; *len+=1; /*插入元素*/ }
顺序表的删除元素的思想是:将表中的第i个位置的元素删除,第i个位置之后的元素一次向前移动一位。代码如下:
/**向顺序表中删除元素 **参数Sqlist:表首地址 **参数*len:表的长度 **参数i:删除元素的位置 */ void DelElem(int Sqlist[],int *len,int i) { int j; if(i<1 || i>*len) { printf("This delete is illegal \n"); return; } for(j=i;j<=*len;j++) Sqlist[j-1]=Sqlist[j]; /*将第i个元素之后的元素向前移*/ *len=*len-1; }
代码示例:
#include "stdio.h" #define MaxSize 10 /*静态顺序表的各种操作 ** **向顺序表中插入元素 **参数Sqlist:表首地址 **参数*len:表的长度 **参数i:插入元素的位置 从1开始 **参数x:待插入的元素值 */ void insertElem(int Sqlist[],int *len,int i,int x) { int t; if(*len==MaxSize || i<1 || i>*len+1) { printf("This insertnis illegal \n"); return; } /*非法插入*/ for(t=*len-1;t>=i-1;t--) Sqlist[t+1]=Sqlist[t]; Sqlist[i-1]=x; *len+=1; /*插入元素*/ } /**向顺序表中删除元素 **参数Sqlist:表首地址 **参数*len:表的长度 **参数i:删除元素的位置 */ void DelElem(int Sqlist[],int *len,int i) { int j; if(i<1 || i>*len) { printf("This delete is illegal \n"); return; } for(j=i;j<=*len;j++) Sqlist[j-1]=Sqlist[j]; /*将第i个元素之后的元素向前移*/ *len=*len-1; } /*测试函数*/ void main() { int Sqlist[MaxSize]; int len; int i; printf("Please input six integer number\n"); len=6; for(i=0;i<len;i++) scanf("%d",&Sqlist[i]); for(i=0;i<len;i++) printf("%d ",Sqlist[i]); printf("\nThe spare length is %d \n",MaxSize-len); /*显示表中剩余的空间*/ printf("insert number 3 into Sqlist[3] \n"); insertElem(Sqlist,&len,3,0); /*在表中的第三个位置插入0*/ for(i=0;i<len;i++) /*输出插入后的表*/ printf("%d ",Sqlist[i]); printf("\nThe spare length is %d \n",MaxSize-len); printf("delete number from Sqlist[6] \n"); DelElem(Sqlist,&len,6); for(i=0;i<len;i++) /*输出删除后的表*/ printf("%d ",Sqlist[i]); printf("\nThe spare length is %d \n",MaxSize-len); return; }
运行结果显示: