2.2 查找
2.2.1 线性表
for 循环按着索引遍历
int LocateElem_Sq(SqList L,ElemType e){ //算法2.2 顺序表的查找
//顺序表的查找
for(int i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;
return 0;
}
2.2.2 单链表
按顺序
指针下移遍历 p= p->next;
Status GetElem_L(LinkList L,int i,ElemType &e){ //算法2.6 按序号查找
//在带头结点的单链表L中查找第i个元素
int j;
LNode *p;
p=L->next;j=1; //初始化,p指向第一个结点,j为计数器
while(j<i&&p){ //顺链域向后扫描,直到p指向第i个元素或p为空
p=p->next;++j;
}
if(!p || j>i) return ERROR; //第i个元素不存在
e=p->data; //取第i个元素
return OK;
}
按值
指针下移遍历,比较指针值域p->data;
LNode *LocateElem_L(LinkList L,ElemType e){ //算法2.7 按值查找
//在带头结点的单链表L中查找值为e的元素
LNode *p;
p=L->next;
while(p&&p->data!=e)
p=p->next; //寻找满足条件的结点
return p; //返回L中的值为e的数据元素的位置,查找失败返回NULL
} //LocateElem_L
2.2.3 双链表
链表指针后移,单双链表相同
DuLNode *GetElemP_DuL(DuLinkList L,int i){
//在带头结点的双向链表L中查找第i个元素,返回结点的地址
int j;
DuLNode *p;
p=L->next;j=1; //初始化,p指向第一个结点,j为计数器
while(j<i&&p){ //顺链域向后扫描,直到p指向第i个元素或p为空
p=p->next;++j;
}
if(!p || j>i) return NULL; //第i个元素不存在
return p;
} //GetElemP_DuL
2.2.4 顺序栈
没有按值,索引查找,只能出栈,入栈
2.2.5 链栈
没有按值,索引查找,只能出栈,入栈
2.2.6 循环队列
没有按值,索引查找,只能出队,入队
2.2.7 链队
没有按值,索引查找,只能出队,入队;
简单总结以上各数据结构的流程;待持续更新
网友评论