算法导论10.2习题
#include<iostream>
using namespace std;
//单向循环链表
class SList
{
public:
struct Node
{
Node(){}
Node(int val)
:_val(val){}
int _val;
Node * _next;
};
public:
SList()
{
_head = new Node(0);
_head->_next = _head;
}
void Insert(int val)
{
Node * node = new Node(val);
node->_next = _head->_next;
_head->_next = node;
}
void Delete(Node * nod)
{
Node *tmp = nod->_next;
nod->_next = tmp->_next;
if(tmp == _head)
{
_head = nod;
}
else
{
nod->_val = tmp->_val;
}
delete tmp;
}
void Push(int val)
{
Node * nod = new Node(val);
nod->_next = _head->_next;
_head->_next = nod;
}
Node * Pop()
{
if(_head->_next== _head)
return NULL;
Node *tmp = _head->_next;
_head->_next = tmp->_next;
return tmp;
}
void Enqueue(int val)
{
Node *nod = new Node();
nod->_next = _head->_next;
_head->_next = nod;
_head->_val = val;
_head = nod;
}
Node * Dequeue()
{
if(_head->_next == _head)
return NULL;
Node *tmp = _head->_next;
_head->_next = tmp->_next;
return tmp;
}
private:
Node * _head;
};
1. 动态集合上的操作insert能否用一个单链表在O(1)时间内实现?对delete操作呢?
可以在O(1)的时间内实现insert操作
可以在O(1)的时间复杂度内实现delete操作.
2.用一个单链表L实现一个栈,要求Push和Pop操作的时间复杂度为O(1)
如上代码
3.用一个单链表L实现一个栈,要求Enqueue和Dequeue的时间复杂度为O(1)