C++双向循环链表

#include <iostream>
using namespace std;
class Node{
	public:
	Node *next;
	Node *previous;
	int element;
	Node(int element,Node *next,Node *previous){
		this->element=element;
		this->next=next;
		this->previous=previous;
	}
};
class LinkedList{
public:
	LinkedList();
	~LinkedList(){};
	void addFirst(int);
    void addLast(int);
    void add(int index, int element);
    int getFirst();
    int getLast();
    int get(int);
    int removeFirst();
    int removeLast();
    int remove(int);
    void iterate();
private:
	Node *header;
	int size;
};
LinkedList::LinkedList()
{
	header = new Node(0, NULL, NULL);
    header->next = header;
    header->previous = header;
    size = 0;
}
void LinkedList::addFirst(int i)
{
	header->next = new Node(i, header->next, header);
    header->next->next->previous = header->next;
    ++size;
}
void LinkedList::addLast(int i)
{
	header->previous=new Node(i,header,header->previous);
	header->previous->previous->next=header->previous;
	++size;
}
void LinkedList::add(int index, int element)
{
	if(index > size || index < 0) 
	{
        cout << "Exception in add(): Index out of bound." << '\n';
        return;
    }
    Node *entry;
	entry=header->next;
	for(int i=0;i<index;i++)
	{
		entry=entry->next;
	}
	entry->previous->next=new Node(element,entry,entry->previous);
	entry->previous=entry->previous->next;
	++size;
}
int LinkedList::getFirst()
{
	if(!size)
	{
        cout << "Exception in getFirst(): List is empty." << endl;
	}
    return header->next->element;
}
int LinkedList::getLast()
{
	if(!size)
	{
		cout<<"Exception in getFirst(): List is empty."<<endl;
	}
	return header->previous->element;
}
int LinkedList::removeFirst()
{
	int remove=header->next->element;
	header->next=header->next->next;
	header->next->previous=header;
	--size;
	return remove;
}
int LinkedList::removeLast()
{
	int remove=header->previous->element;
	header->previous=header->previous->previous;
	header->previous->next=header;
	--size;
	return remove;
}
int LinkedList::remove(int index)
{
	if(index > size || index < 0) 
	{
        cout << "Exception in add(): Index out of bound." << '\n';
        return 0;
    }
    Node *entry;
	entry=header->next;
	for(int i=0;i<index;i++)
	{
		entry=entry->next;
	}
	int remove=entry->element;
	entry->previous->next=entry->next;
	entry->next->previous=entry->previous;
	--size;
	return remove;
	
}
/*
* 用来输出所有元素的迭代方法。
*/
void LinkedList::iterate()
{
	if(!size) {
        cout << "Exception in iterate(): List is empty." << '\n';
        return;
    }
    for(Node *entry = header->next; entry != header; entry = entry->next)
        cout << entry->element << " ";
    cout << '\n';
}
int main()
{
    LinkedList myList;
	myList.addFirst(3);
	myList.addFirst(5);
	myList.addFirst(7);
	myList.iterate();
	myList.addLast(9);
	myList.removeFirst();
	myList.iterate();
	myList.removeLast();
	myList.add(1,8);
	myList.iterate();
	myList.remove(1);
	myList.iterate();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值