栈的链表实现

1)list.h

 

/*

 * list_2.cpp

 *

 *  Created on: 2013年8月2日

 *      Author: 黄东东

 *      为了能有章泽天这样的女朋友而不断努力。。。。。。

 */



#include <iostream>



using namespace std;



typedef int T;



class List {

	struct Node {



		T data;

		Node* next;

		Node(const T& d = T()) :

				data(d), next(0) {



		}



	};



	Node* head;

	int len;



public:

	List() :

			head(NULL), len(0) {



	}



	~List() {

		clear();

	}



	void insert(const T& d, int pos) {



		Node*& pn = getptr(pos);

		Node* p = new Node(d);

		p->next = pn;

		pn = p;

		++len;

	}



	void push_front(const T& d) {

		insert(d, 0);

	}



	List& push_back(const T& d) {

		insert(d, size());



		return *this;

	}



	void clear() {

		Node* p;

		while (head != NULL) {

			p = head->next;

			delete head;

			head = p;

		}

	}



	void erase(int pos) {

		if (pos < 0 || pos >= size()) {

			return;

		}



		Node*& pn = getptr(pos);

		Node* p = pn;

		pn = pn->next;

		delete p;

		--len;

	}



	void remove(const T& d) {

		int pos;

		while ((pos = find(d)) != -1) {

			erase(pos);

		}

	}



	void set( int pos,const T& d) {

		if (pos < 0 || pos >= size()) {

			return;

		}



		getptr(pos)->data = d;

	}



	Node*& getptr(int pos) {



		if (pos < 0 || pos > size()) {

			pos = 0;

		}



		if (pos == 0) {

			return head;

		}



		Node* p = head;



		for (int i = 1; i < pos; ++i) {

			p = p->next;

		}



		return (*p).next;



	}



     int find(const T& d) {

		Node* p = head;

		int pos = 0;

		while (p) {

			if (p->data == d) {

				return pos;

			}



			p = p->next;

			pos++;

		}



		return -1;

	}



	const int& front() {

		if (empty()) {

			throw "空";

		}

		return head->data;

	}



	int back() {

		if (empty()) {

			throw "空";

		}



		Node* p = head;



		while (p->next != NULL) {

			p = p->next;

		}



		return (*p).data;

	}



	bool empty() {

		return head == NULL;

	}



	int size() {

		return len;

	}



	void travel() {

		Node* p = head;



		while (p != NULL) {



			cout << p->data << ' ';

			p = p->next;

		}



		cout<<endl;

	}

};



//int main(){

//	List l;

//	l.push_front(5);//5

//	l.push_front(8);//8 5

//	l.push_front(20);//20 8 5

//	l.insert(9, 2);//20 8 9 5

//	l.insert(6, 100);//6 20 8 9 5

//	l.insert(7, -10);//7 6 20 8 9 5

//	l.insert(1, 2);//7 6 1 20 8 9 5

//

//	//7 6 1 20 8 9 5 10 15

//	l.push_back(10).push_back(15).travel();

//

//

//	l.erase(0);//6 1 20 8 9 5 10 15

//	l.erase(l.size() - 1);//6 1 20 8 9 5 10

//	l.erase(2);//6 1 8 9 5 10

//	l.travel();

//

//	l.push_back(6);//6 1 8 9 5 10 6

//	l.insert(6,3);//6 1 8 6 9 5 10 6

//	l.travel();

//

//	l.remove(6);//1 8 9 5 10

//	l.travel();

//

//	l.set(0,666);//666 8 9 5 10

//	l.set(4,789);//666 8 9 5 789

//	l.set(l.find(9),123);//666 8 123 5 789

//	l.set(1,777);//666 777 123 5 789

//	l.travel();

//

//	cout<<l.front()<<"...."<<l.back()<<','<<l.size()<<endl;

//

//	while(!l.empty()){

//		l.erase(0);

//	}

//

//	cout<<"size: "<<l.size()<<endl;

//}


 


2)stack.cpp

 

/*

 * stack_1.cpp

 *

 *  Created on: 2013年8月2日

 *    为了能有章泽天这样的女朋友而不断努力。。。。。。

 *    加油。。。fighting。。。。。

 */



#include <iostream>

#include "list_2.h"



using namespace std;



class Stack{

	List l;

public:

	void push(const T& d){

		l.push_front(d);

	}



	T pop(){



		T t = l.front();

		l.erase(0);

		return t;

	}



	const T& top(){



		return l.front();

	}



	bool empty(){



		return l.empty();

	}



	bool full(){



		return false;

	}



	void clear(){



		l.clear();

	}



	int size(){



		return l.size();

	}

};

int main(){



	Stack s;

	s.push(2);

	s.push(4);

	s.push(6);

	s.push(8);

	s.push(10);



	while(!s.empty()){

		cout<< s.pop()<<endl;

	}

}




 

 

你可能感兴趣的:(链表)