顺序表
知识点示例:
如图,
数据:1204101、钱小明…
数据项:学号、姓名、性别、年龄、班级、健康状况
数据元素:表中一行的数据,此时又称记录(recode)
数据对象:在校学生健康信息表
——————————————————————————————
主函数
int main(){
list L;
ElemType X;
int i,j;
L=MakeEmpty();
printf("请输入一组数据(以00结尾):\n");
L=input(L);
printf("顺序表存储成功:\n");
output(L);
printf("\n************************************\n");
printf("请输入需要插入的数据及插入位序:\n");
scanf("%d %d",&X,&i);
Insert(L,X,i);
printf("顺序表插入成功:\n");
output(L);
printf("\n************************************\n");
printf("请输入需要查找的数:\n");
scanf("%d",&X);
printf("该数位序为:%d",Find(L,X));
printf("\n************************************\n");
printf("请输入需要查找数字的位序:\n");
scanf("%d",&i);
printf("该数为:%d",find(L,i));
printf("\n************************************\n");
printf("请输入需要删除数字的位序:\n");
scanf("%d",&j);
L=Delete(L,j);
printf("删除成功:\n");
output(L);
return 0;
}
1.顺序表结构体定义
typedef int ElemType;
typedef int position;
struct LNode{
ElemType data[MAXSIZE];
position last;
};
typedef struct LNode *ptroToLNode;
typedef ptroToLNode list;//定义结构体为指针类型
2.顺序表初始化
list MakeEmpty(){
list L;
L=(list)malloc(sizeof(struct LNode));//分配动态存储空间
L->last=-1;//置为空表
return L;
}
3.顺序表输入
list input(list L){
int X;
L=MakeEmpty();
scanf("%d",&X);
while(X!=0){
L->last++;
L->data[L->last]=X;
scanf("%d",&X);
}
return L;
}
4.顺序表输出
void output(list L){
int i;
for(i=0;i<=L->last;i++)
printf("%d ",L->data[i]);
}
5.顺序表插入
bool Insert(list L,ElemType X,int i){
position j;
if(L->last>=MAXSIZE){
printf("表满!\n");
return false;
}
if(i<1||i>L->last+2){
printf("位序不合法!\n");
return false;
}
for(j=L->last;j>=i-1;j--)
L->data[j+1]=L->data[j];//i以后数据元素向后移动一位
L->data[i-1]=X;
L->last++;
return true;
}
6.顺序表查找
(按值查找)
position Find(list L,ElemType X){//ONE
position i=0;
while(i<=L->last&&L->data[i]!=X)
i++;
if(i>L->last)
return ERROR;
else
return i+1;
}
position Find(list L,ElemType X){//TWO
position i;
for(i=0;i<=L->last&&L->data[i]!=X;i++);//***
if(i<=L->last)
return i+1;
else
return ERROR;
}
(按位序查找)
ElemType find(list L,position i){
if(i<1||i>L->last)
return ERROR;
else return L->data[i-1];
}
知识点:
设数组a[j]下标为j,数组位序为i,则可知i=j+1
7.顺序表的删除
list Delete(list L,int i){
position j;
if(i<1||i>L->last+1)
printf("位序%d不合法",i);
for(j=i;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
return L;
}
运行结果:
请输入一组数据(以00结尾):
1 2 3 4 5
00
顺序表存储成功:
1 2 3 4 5
************************************
请输入需要插入的数据及插入位序:
6 4
顺序表插入成功:
1 2 3 6 4 5
************************************
请输入需要查找的数:
4
该数位序为:5
************************************
请输入需要查找数字的位序:
4
该数为:6
************************************
请输入需要删除数字的位序:
6
删除成功:
1 2 3 6 4
--------------------------------
Process exited after 17.91 seconds with return value 0
请按任意键继续. . .