数据结构学习,链表和数据表
1.顺序表的查找
int Locate(Sqlist L, ElemType x){
for (int i = 0; i < L.length; ++i){
if(L.elem[i]==x)return i+1;//逻辑位置i+1
}
return 0;
}
2.线性表数据插入
void InsertList(Sqlist &L,int i,ElemType x){
if(i<1||i>L.length+1 || L.length>=L.ListSize){
printf("error");
return;
}
for (int j = L.length-1; j >=i-1 ; --j) {
L.elem[j+1]=L.elem[j];//先移
}
L.elem[i-1]=x;//后插
++L.length;//长+1
return;
}
3.顺序表的删除
void deleteList(Sqlist &L,int i){
for (int j = i; j <=L.length ; ++j) {
L.elem[j-1]=L.elem[j];//赋值前移
}
L.length--;//长-1
}
4.链表查找
bool LocateElem (List L,int e)
{
List p=L->next;
while (p!=NULL && p->data!=e)//依次比较
p=p->next;
if (p==NULL)
return false;
else
return true;
}
5.链表插入
void ListInsert(List &L, int i,int e){
List p=L;int j=0;
while(p && jnext;
++j;
}
if(!p||j>i-1) return ; //i大于表长+1或者小于1
List s=new LNode;//生成新节点
s->data=e;///将节点s的数据置为e
s->next=p->next;//将节点s插入l中
p->next=s;
return ;
}
6.链表删除
void ListDelete(List &L, int i){
List p=L;int j=0;
while(p->next &&jnext; ++j;
}
if(!(p->next)||j>i-1) return ; //删除位置不合理
List q=p->next; //临时保存被删结点的地址以备释放
p->next=q->next;//改变删除结点前驱结点的指针域
delete q;//释放删除结点的空间
return ;
}