练习题

10.2-1

能,能

10.2-2

//结点
struct node
{
    node *pre;//为了方便实现出栈操作
    node *next;
    int key;
    node(int x):pre(NULL),next(NULL),key(x){}
};
//链式栈
struct list
{
    node *Head;//栈的起始结点
    node *Top;//栈顶指针
    list(){Head = new node(0);Top = Head;}
};
//打印栈中的元素
void Print(list *L)
{
    node *p = L->Head->next;
    while(p)
    {
        cout<<p->key<<' ';
        p = p->next;
    }
    cout<<endl;
}
//入栈
void Push(list *L, int x)
{
    //构造一个新的结点
    node *A = new node(x);
    //链入到栈顶位置,修改指针
    L->Top->next = A;
    A->pre = L->Top;
    L->Top = A;
}
//出栈
int Pop(list *L)
{
    if(L->Head == L->Top)
    {
        cout<<"error:underflow"<<endl;
        return -1;
    }
    //取出栈顶元素
    int ret = L->Top->key;
    //修改指针
    node *A = L->Top;
    L->Top = A->pre;
    L->Top->next = NULL;
    delete A;
    return ret;
}

10.2-3

10.2-4

把哨兵的值置为一个不可能与x相等的值

10.2-5

见算法导论 10.2-5 环形链表实现字典操作INSERT、DELETE、SEARCH

10.2-6

使用带尾指针的链表,令A的尾指针为tail,tail->next=B

10.2-7

10.2-8

见算法导论-10.2-8

Last updated