zoukankan      html  css  js  c++  java
  • 栈的链表实现

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


  • 相关阅读:
    PDF文件中的Form保存问题
    Understanding IP Fragmentation
    tcp ip guide IPsec IKE
    Windows安全事件日志中的事件编号与描述
    Cisco PIX fix up and Juniper firewall FTP ALG
    很好的IPSec介绍,详细解释了IKE协商的2个阶段的作用
    virtualbox 下运行Ubuntu 8.10的分辨率和guest additions的问题。
    Fixing the ‘Do you want to display nonsecure items’ message
    windows xp 开始菜单里面所有项目右键不起作用。
    HP backup and recovery manager
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3233748.html
Copyright © 2011-2022 走看看