当前位置:编程学习 > C/C++ >>

栈的链表实现

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

/*
 * 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);
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,