数据结构学习2
1.顺序表插入
void InsertList(Sqlist &L,int i,ElemType x){
for ( int j=L.length-1;j>= i-1;--j )
L.elem[j+1]=L.elem[j];
L.elem[i-1]=x;
++L.length;
}
2.顺序表的删除
void deleteList(Sqlist &L,int i){
for ( int j=i ; j<=L.length-1 ; j++)
L. elem[j-1]=L. elem[j];
L.length--;
}
3.顺序表查找
int Locate(Sqlist L, ElemType x){
for (int i=0;i< L.length;i++)
if (L.elem[i]==x) return i+1;
return 0;
}
4.链表的插入
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 ;
}
5.链表的删除
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 ;
}
6.链表的查找
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;
}
7.顺序栈入栈
Status Push(SqStack &S, SElemType e)
{
if(S.top-S.base==S.stacksize)
return ERROR;
*S.top++=e;
return OK;
}
8.顺序栈出栈
Status Pop( SqStack &S, SElemType &e)
{
if( S.top == S.base ) // 栈空
return ERROR;
e =*--S.top;
return OK;
}
9.链栈入栈
Status Push(LinkStack &S, SElemType e){
LinkStack p=new StackNode; //生成新结点p
if (!p) exit(OVERFLOW);
p->data=e;
p->next=S; S=p;
return OK;
}
10.链栈出栈
Status Pop(LinkStack &S, SElemType &e){
if (S==NULL) return ERROR;
e = S-> data;
LinkStack p = S; S = S-> next;
delete p;
return OK;
}
11.循环队列入队
Status EnQueue(SqQueue &Q, QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
12.循环队列出队
Status DeQueue(SqQueue &Q, QElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
13.链队列入队
Status EnQueue(LinkQueue &Q, QElemType e){
QNode *p;
p=new QNode;
if(!p) exit(OVERFLOW);
p->data=e; p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
14.栈队列出队
Status DeQueue(LinkQueue &Q, QElemType &e){
QueuePtr p;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;//队列中只有一个元素
delete p;
return OK;
}