【数据结构 | 复习 | 自用】1-1 诸论、线性表、栈和队列

一、诸论

链式存储结构

优点

  • 便于数据修改,在对元素进行插入或删除操作的时候仅需修改相应节点的指针域,不必移动指针。

缺点

  • 与顺序存储相比,空间利用率低,因为分配给元素的存储单元有一部分被用来存储节点之间的逻辑关系;
  • 此外,逻辑相邻的节点不一定存储空间相邻,所以不能对元素进行随机存取。

二、线性表

单链表

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LinkNode;

双指针法删除单链表中值最大的结点(假设其唯一)

void delmaxnode(LinkNode *&L)
{
    LinkNode *p = L -> next,*pre = L,*maxpre = pre;

    while(p != NULL)
    {
        if(maxp -> data < p -> data)
        {
            maxp = p;
            maxpre = pre;
        }
        pre = p;
        p = p -> next;
    }
    maxpre -> next = maxp -> next;
    free(maxp);
}

在非空单链表第一个最大值结点(最大值节点可能有多个)之前插入一个值为x的结点

void delmaxnode(LinkNode *&L,int x)
{
    LinkNode *p = L -> next,*pre = L,*maxpre = pre,*s;

    while(p != NULL)
    {
        if(maxp -> data < p -> data)
        {
            maxp = p;
            maxpre = pre;
        }
        pre = p;
        p = p -> next;
    }
    s = (LinkNode *)malloc(sizeof(LinkNode));
    s -> data = x;
    s -> next = maxp;
    maxpre -> next = s;
}

三、栈和队列

栈的主要特点是后进先出。

问题 :用S表示进栈操作,X表示出栈操作。若进栈顺序为1234,如何得到1342的出栈序列?

答案 :SXSSXSXX

问题 :若进栈顺序为1234,如何得到3142的出栈序列?

答案 :无法得到。

数组模拟栈

typedef struct
{
    ElemType data[MaxSize];
    int top;
}SqStack;

出栈

bool Pop(SqStack *s,ElemType &e)
{
    if(s -> top == -1)
        return false;
    e = s -> data[s -> top];
    s -> top --;
    return true;
}

 共享栈

使用一个数组实现两个栈,如下图所示,被称为共享栈。

队列

typedef struct
{
    ElemType data[MaxSize];
    int front,rear; // 头指针和尾指针
}SqQueue;

队空的条件 

q -> front == q -> rear;

 队满的条件

q -> rear = MaxSize - 1;

初始化队列

void InitQueue(SqQueue *&q)
{
    q = (SqQueue *) malloc(sizeof(SqQueue));
    q -> front = q -> rear = -1;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值