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


  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3233748.html
Copyright © 2011-2022 走看看