概念
顺序表:指的是用一段连续的存储单元依次存储线性表的元素。
代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10 //线性表的最大长度为10
//定义结构体
typedef struct SqList{
int data[MAXSIZE];
int length;
}SqList;
//输出顺序表
void printSqList(SqList L){
int i;
for(i=0;i<L.length;i++){
printf("%3d",L.data[i]);
}
printf("\n");
}
//初始化
void initSqList(SqList *L){
L->length = 0;
printf("初始化完成!\n");
}
//清空顺序表
void clearSqList(SqList *L){
L->length = 0;
printf("表已经被清空!");
}
//获取指定元素的位置
int getLocateElem(SqList L,int elem){
int i;
for(i=0;i<L.length;i++){
if(L.data[i] == elem){
return i+1;
}
}
printf("not found !");
return 0;
}
//获取指定位置的元素
int getELem(SqList L,int i){
if(i<0 || i>L.length){
printf("error prosition!");
return 0;
}else{
return L.data[i-1];
}
}
//获取顺序表的长度
int listLength(SqList L){
return L.length;
}
//在指定位置添加元素
void listInsert(SqList *L, int pos,int elem){
int i;
if(L->length>=MAXSIZE){
printf("表已满!\n");
exit(-1);
}
if(pos<0 || pos>L->length+1){
printf("pos error !\n");
exit(-1);
}
for(i=L->length;i>=pos;i--){
L->data[i] = L->data[i-1];
}
L->data[pos-1] = elem;
L->length++;
}
//删除指定位置的元素
void listDelete(SqList *L,int pos) {
int i;
if(L->length==0){
printf("表为空!");
exit(-1);
}
if(pos<0 || pos>MAXSIZE){
printf("pos error !\n");
exit(-1);
}
for(i=pos-1;i<L->length;i++){
L->data[i] = L->data[i+1];
}
L->length--;
printf("已删除顺序表中的第%d位置的元素",pos);
}
int main(){
SqList L;
int i;
int pos,elem;
initSqList(&L);//初始化
for(i=5;i>0;i--){
listInsert(&L,1,i);//第一个位置插入
}
printSqList(L);
printf("在最后一个位置插入值“6”\n");
listInsert(&L,L.length+1,6);//在最后一个位置插入
printSqList(L);
pos = getLocateElem(L,5);//获取指定元素的位置
printf("元素5的位置:%3d\n",pos);
elem = getELem(L,3);
printf("第三个位置的元素是:%3d\n",elem);//获取指定位置的元素
listDelete(&L,1);//删除指定位置的元素
printf("此时顺序表的长度是:%3d\n",L.length);
printSqList(L);
clearSqList(&L);
printSqList(L);
printf("此时顺序表的长度是:%3d\n",L.length);
return 0;
}