栈的链表实现

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;
	}
}


 

 

posted @ 2013-08-02 22:21  javawebsoa  Views(222)  Comments(0Edit  收藏  举报