数据结构考研--线性表例2-1
//天勤p26例2-1:已知一个顺序表L,其中的元素递增有序,设计一个算法,插入一个元素后顺序表仍递增有序
//思路:先遍历表,找到插入位置,然后插入位置及之后的元素后移一位。若找不到,直接插到表尾
#include "stdio.h"
#define MAXSIZE 100
typedef struct List{
int L[MAXSIZE];
int length;
}List;
void init(List &Li){ //初始化
for(int i=0;i<5;i++){
Li.L[i]=i;
}
Li.length = 5;
}
int findElem(List Li,int n){ //找插入位置,参数是线性表li,要插入元素n
int i;
for(int i=0;i<Li.length;i++){
if(n<Li.L[i]) return i;
}
return Li.length; //找不到,直接插到表尾
}
void insert(List &Li,int n){ //插入
//先获取插入位置:
int local = findElem(Li,n);
for(int i=Li.length-1;i>=local;i--){ //插入位置及插入位置后所有元素后移一位
Li.L[i+1] = Li.L[i];
}
Li.L[local] = n; //插入元素
Li.length = Li.length + 1; //长度加加
}
int main(){
List list; //创建一个结构体变量list
init(list); //初始化线性表
int n = 3; //要插入的元素
insert(list,n); //插入
for(int i=0;i<list.length;i++){ //测试输出
printf("%d ",list.L[i]);
}
getchar();
return 0;
}
//*是地址
//&是取地址
//只有链表在创建新节点时需要用malloc申请空间
//顺序表无论是用结构体包数组还是直接用数组都无需用malooc
//假如用的是结构体数组,那么在函数需要修改结构体的内容的时候需要和普通变量一样传递地址或者指针。(用一个结构体指针指向或者直接取地址)
//什么时候用'.',什么时候用'->'? 指针变量用->,普通结构体变量用.
//声明结构体变量:List L;
//假如要传递给函数,无需改变L中的元素时,函数参数直接用List L
//要修改L中元素时,函数参数需要使用‘&’取地址。
//PS:如果有错误欢迎指出