数据结构:导论、栈与队列

导论

算法的特征:有穷性(finiteness),确定性(definiteness),输入,输出,有效性/可行性(effectiveness)

O表示法表示的是当N->某一值或者无穷大时,斜率的变化。重要的是曲线的形状,而不是具体的曲线的值,因为曲线的值可以通过常数C来变化。

大O表示法:用一个常数倍的简单函数,包裹住T(N),由此来表示“上界”
Ω \Omega Ω表示法:下界
Θ \Theta Θ表示法:既是上界也是下界
小o表示法:严格上届(严格大于)

线性表

用链表表示的时候,一定要记住**添加判断:是否为最后一个节点?是否可能遇到NULL->某个域**!!!!!

栈(Stack)

LIFO,后进先出。

Error check must be done before Push or Pop (Top).
这里写代码的时候一定要先判断 S==NULL 或 S!=NULL 。(Stack S)
注意防止**尾递归**!!!

void  PrintList ( List L )
{
    if ( L != NULL )  {
        PrintElement ( L->Element );
        PrintList( L->next );
    }
}  /* a bad use of recursion */

//编译器会自动改为如下:

void  PrintList ( List L )
{
top:  if ( L != NULL )  {
           PrintElement ( L->Element );
           L = L->next;
           goto top; /* do NOT do this */
         }
}  /* compiler removes recursion */
//递归一定可以是被消除的。非递归运行速度快。但是递归易懂。

用栈实现中后缀表达式转换求值思路:

一个栈存数,一个栈存符号。数一个一个读入。存符号的栈操作顺序:读入一个新符号,判断栈顶元素优先级是否大于**等于**读入的新符号(注意如果栈顶为-,新读入为+,也要弹栈),如果大于等于,则弹栈(符号和数),这一步操作通过while,一直到栈顶元素优先级小于新读入元素。

注意左括号入栈前优先级最高,入栈后优先级最低,当且仅当读入右括号,否则不弹栈。

注意^运算符的运算顺序是从右到左:

223 ( 2 2 3 2^{2^3} 223) must be converted to 2 2 3 ^ ^, not 2 2 ^ 3 ^ since exponentiation associates right to left.

队列(Queue)

FIFO,先进先出。

  • front指向队头(dequeue方向)

  • rear指向队尾(enqueue方向)

“循环队列”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值