zoukankan      html  css  js  c++  java
  • 链表栈

    链表节点

    ListNode.h

     1 #include "stdafx.h"
     2 #include<iostream>
     3 using namespace std;
     4 template <typename Type>  class LinkStack;
     5 template <typename Type> 
     6 // 链表节点
     7 class ListNode{
     8 private:
     9     friend class LinkStack<Type>;
    10     ListNode():p_next(NULL){}
    11     ListNode(Type item , ListNode<Type>*next=NULL):data(item),p_next(next){}
    12     ~ListNode(){
    13         p_next=NULL;
    14     }
    15 private:
    16     Type data;  // 节点数据
    17     ListNode<Type>*p_next;  //下一个节点
    18 };
    View Code

    栈节点

    LinkNode.h

     1 #include "ListNode.h"
     2 template <typename Type>
     3 class LinkStack{
     4 public:
     5     LinkStack():p_top(NULL){}
     6     ~LinkStack(){
     7         makeEmpty();
     8     }
     9 public:
    10     void makeEmpty();   // 清空
    11     bool push(Type item);  // 入栈
    12     Type pop();  // 出栈
    13     Type getTop();  // 获取栈首元素
    14     void print();  // 打印
    15     bool isEmpty(){   // 判空
    16         return p_top==NULL; 
    17     }
    18 private:
    19     ListNode<Type>*p_top;
    20 };
    21 template<typename Type>
    22 void LinkStack<Type>::makeEmpty(){
    23     ListNode<Type>*pdel;
    24     while(p_top!=NULL){
    25         pdel = p_top;
    26         p_top = p_top->p_next;
    27         delete pdel;
    28     }
    29 }
    30 template <typename Type>
    31 bool LinkStack<Type>::push(Type item){
    32     ListNode<Type>*temp = new ListNode<Type>(item);
    33     if(temp==NULL){
    34         cout << "filed push item:"<<item<<endl;
    35         return false;
    36     }
    37     temp->p_next = p_top;
    38     p_top = temp;
    39     return true;
    40 }
    41 template <typename Type>
    42 Type LinkStack<Type>::pop(){
    43     if(isEmpty()){
    44         cout << "stack is empty , can't pop the element"<<endl;
    45         exit(0);
    46     }
    47     ListNode<Type>*temp = p_top;
    48     p_top = p_top->p_next;
    49     Type item = temp->data;
    50     delete temp;
    51     return item;
    52 }
    53 
    54 template <typename Type>
    55 Type LinkStack<Type>::getTop(){
    56     if(isEmpty()){
    57         cout << "stack is empty"<<endl;
    58         exit(0);
    59     }
    60     return p_top->data;
    61 }
    62 template <typename Type>
    63 void LinkStack<Type>::print(){
    64     if(isEmpty()){
    65         cout << "stack is empty"<<endl;
    66         exit(0);
    67     }
    68     ListNode<Type>*pmove = p_top;
    69     cout << "stack";
    70     while(pmove!=NULL){
    71         cout << "->" << pmove->data;
    72         pmove = pmove->p_next;
    73     }
    74     cout << endl << endl;
    75 }
    View Code
  • 相关阅读:
    高程第五章(引用类型)
    第四章(变量、作用域、内存问题)
    label语句和break continue的使用(高程第三章)
    高级程序设计第三章
    max取得数组的最大值
    使用bind()扩充作用域
    函数
    数据类型、字符编码、文件处理
    Python入门
    8.8每日作业系列之循环模块运用
  • 原文地址:https://www.cnblogs.com/bobo0892/p/3999951.html
Copyright © 2011-2022 走看看