数据结构(1)

来源:互联网 发布:oracle sql参考手册 编辑:程序博客网 时间:2024/06/18 13:18

循环链表:

    若尾节点rear->next==null,为单链表;若尾节点rear->next!=null,为循环链表;

    将两个循环链表合成一个表:

    P=rearA->next;   //保持头结点

    rearA->next=rearB->next->next;//指向B的第一个节点(不是头结点)

    q=rearB->next;//保存B的头结点

    rearB->next=p;//将B的终端节点连接到A的头结点

    free(q);//删除B的头结点

双向链表: 

    双向链表的存储结构:

typedef struct DulNode

{

    ElemType data;

    Struct DulNode *prior;//直接前驱结点

Struct DulNode *next; // 直接后继结点

}

 p->next->prior=p=p->prior->next;//结点p的后继的前驱或。。还是它自己

将储存元素e的节点S插入到p和p->next之间(顺序是s的前驱和后继,再后结点的前驱):

s->prior=p;//把p赋值给s的前驱结点

s->next=p->next;//把p->next赋值给s的后继结点

p->next->prior=s;

p->next=s;//把s赋值给p的后继结点

删除p结点:
    p->prior->next=p->next;

    p->next->prior=p->prior;

free(p);

   

栈:限定仅在表尾进行插入和删除的操作

typedef struct

{

    SElemType data[MAXSIZE];

    int top;//用于栈顶指针

}Sqstack;

栈的顺序储存结构:
进栈操作push:

Status Push( Sqstack *s, SElemType e)

{

    If(s->top==MAXSIZE-1)

        return -1;  //栈满

    s->top++;

    s->data[s->top]=e;

return 1;

}

出栈操作pop:

Status Pop( Sqstack *s, SElemType *e)

{

    if(s->top==-1)

return -1;

    *e=s->data[s->top];

    s->top--;

    return 1;

}

两栈共享空间:

两个相同类型的栈,为它们各自开辟了数组空间,如果第一个满了,再进栈就溢出了,而另一个还有很多储存空间。数组有两个端点,两个栈有两个栈底,让一个栈的栈底为数组的末端,即下标为0处,另一个栈为数组的末端,下标为n-1处,如果增加元素,就是两端点向中间延伸。

栈1为空时,top1=-1;栈2为空时,top=n。若栈2是空栈,栈1的top=n-1,就是栈1满了。当栈1为空时,top2=0时,栈2满。两个栈见面之时,两个指针之间相差1,即top1+1==top2为栈满。

空间结构:

typedef struct

{

    SElemType data[MAXSIZE];

    int top1;//栈1栈顶指针

int top2;//栈2栈顶指针   

}SqDoublestack;

1 0
原创粉丝点击