顺序表的操作:
这里采用了结构体和指针的部分知识
//自定义结构体
typedef struct{
DataType list[Maxsize];
int size;
}SeqList;
void ListInitiate(SeqList*L) {
L->size=0;
}
int ListLength(SeqList L){
return L.size;
}
//插入是从前往后移动
int ListInsert(SeqList *L,int i,DataType x){
int j;
if(L->size>=Maxsize){
printf("顺序表已满无法插入!\n");
return;
}
else if(i<0||i>L->size){
printf("参数i不合法");
return 0;
}
else{
for(j=L->size;j>i;j--){
L->list[j]=L->list[j-1];
L->list[i]=x;
L->size++;
return 1;
}
}
}
//删除是从后往前移动
int ListDelete(Seqlist *L,int i,DataType *x){
int j;
if(L->size<=0){
printf("顺序表无空元素可以删除");
return 0;
}
else if(i<0||i>L->size-1) {
printf("不合法");
return 0;
}
else{
*x=L->list[i];
for(j=i+1,j<=L->size-1,j++){
L->list[j-1]=L->list[j];
L->size--;
return 1;
}
}
}
//取元素
int ListGet(SeqList L,int i,DataType *x) {
//取顺序表L中第i个元素存于X中,成功返回1,失败返回0
if(i<0||i>L.size-1) {
printf("参数i不合法\n");
return 0;
}
else{
*x=L.list[i];
return 1;
}
}
注意点:
1.插入操作是将元素从前往后移动的,而删除操作是将元素从后往前移动,填补空缺。
2.要注意函数参数传递的类型是普通参数还是指针,若为指针则应该传递地址值。
顺序表操作的实现:
//eg题: 以上方法实现:建立一个线性表,首先依次输入元素123...10,
//然后删除元素5 ,最后依次显示当前线性表中的元素 。
#define MaxSize 100
typedef int DataType ;
void main(void){
SeqList myList;
int i,x;
ListInitiate(&myList);
for(i=0;i<10;i++)
ListInsert(&myList,i,i+1);
ListDelete(&myList,4,&x) ;
//显示顺序表当前元素
for(i=0;i<ListLength(myList);i++) {
ListGet(myList,i,&x);
printf("%d ",x);
}
}
注意点:
1.在设计顺序表时可以使用没有具体数值的MaxSize,但在设计程序时,必须具体定义MaxSize的数值,否则,系统无法为主函数中的变量myList的数组分配具体的存储空间
2.设计程序时必须定义抽象数据类型DataType为已知数据类型
标签:顺序,return,线性表,int,SeqList,list,DataType,数据结构,size From: https://blog.csdn.net/2301_79744217/article/details/142148509