首页 > 技术文章 > 数据结构学习2

muxin520 2021-11-07 21:59 原文

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 && j<i-1){//定位到第i-1个节点
        p=p->next;
        ++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 &&j<i-1){  //定位到ai-1
        p=p->next; ++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;
}

推荐阅读