c++类编程的两个简单的例子

关于栈的数据结构:
类的头文件定义

//              stack.h  -- class definition for the stack 
/******************************************************************/
#ifndef _STACK_
#define _STACK_

typedef unsigned long Item ;

class Stack 
{
private:
            enum { MAX = 10 } ;
            Item items[MAX] ;
            int top ;
public:
            Stack();
            bool isempty() const ;
            bool isfull() const ;
            bool push( Item & item );
            bool pop(  Item & item );
};
#endif

关于具体实现的部分:

//        implement for the stack.h          //
/**********************************************
never let  the implement file has the 
  cin  and cout  opeoration , just let 
class func opers its own private data !
*********************************************/
#include "stack.h"

Stack::Stack(){
  top = 0 ;
}

bool Stack::isempty() const{
  return top == 0 ;
}

//  the const is needed to be added to the implement part 

bool Stack::isfull() const{
  return top == 10 ;
 }

bool Stack::push( Item & item){
if( top < MAX ){
    items[top++] = item ;
    return true ;
     }
   else
              return false ;
}

bool Stack::pop(Item & item){
if( top == 0 )
    return false ;
else{
    item = items[--top];
    return true ;
   }
}

测试部分:

#include "stack.h"
#include<iostream>

int main(){
int i ;

Item item = 8729 ;
Item get ;
Stack stack;

for ( i = 0 ; i < 15 ; i++ )
    stack.push(item);
for( i = 0 ; i < 15 ; i++ )
    {
        if(stack.pop(get))
        std::cout<<get<<std::endl;
    }

}

关于列表的实现,可以加入不同的数据类型的列表
声明的头文件:

#ifndef _list_
#define _list_
#include <stdio.h>
typedef struct elem{
    char type ;
        union
        {
                int   int_ ;
                short shrt_;
                char  char_;
                void * ptr ;
                double double_;
                float float_;  
            }value;
        elem * next ;
        elem * fore ;
}Elem;

class List{
private:
                enum { INT , SHRT , CHR , PTR , DOU , FLT };
                unsigned int count ;
                elem * head ;
                elem * tail ;
public:
                List(){ count = 0 ; head = tail = NULL ;}
                bool push(Elem & item );
                bool pop (Elem & item );
                bool insert( int pos , Elem & item );
                bool purge ( int pos , Elem & item );
                bool getpos( int pos , Elem & item );
                bool isempty();
                void reverse();
                void show() const;
                ~List();
};
#endif

具体实现的文件:
#include "list.h"
#include<iostream>
#include<stdio.h>

void innershow(Elem * ptr)
{
        printf("  in function \n");
        std::cout<<"Type:";
        switch (ptr->type){
        case(0):  printf("int     value:%d\n",ptr->value);    break;
        case(1):  printf("short   value:%d\n",ptr->value);    break;
        case(2):  printf("char    value:%c\n",ptr->value);    break;
        case(3):  printf("pointer value:%p\n",ptr->value);    break;
        case(4):  printf("double  value:%f\n",ptr->value);    break;
        case(5):  printf("float   value:%f\n",ptr->value);    break;
        default:  printf("UNKNOWN value:%p\n",ptr->value);    break;
    }
}

//      function well !
bool List::push(Elem & item){
    Elem * entity = new Elem ;
    if( entity == NULL )
            return 0 ;
    entity->type = item.type ;
    entity->value = item.value ;
    count++;
    if(head == NULL ){
        entity->fore = NULL  ;
        head = tail = entity ;
    }
    else{
        entity->fore = tail ;
        tail->next = entity ;
        tail = entity ;
    }

    entity->next = NULL;

    return 1 ;
}

//    function well !
bool List::pop( Elem & item ){
    Elem * ptr ;
    if ( !count ) return 0;
    item.type = tail->type ;
    item.value= tail->value;
    if( head != tail ){
        ptr = tail->fore ;
        tail->fore->next = NULL ;
        delete tail ;
        tail = ptr ;
    }
    else{
        delete tail ;
        head = tail = NULL;
    }

    count--;

    return 1;
}
    //    function well    在插入时有三种情况,注意了
bool List::insert( int pos , Elem & item ){
    Elem * ptr = NULL ;
    if( pos > count || pos < 0)
        return 0 ;
    if ( pos == count )
        push(item);
    else{
        ptr = head ;
        while(pos--) ptr = ptr->next ;

        Elem * entity = new Elem ;
        if( entity == NULL )
        return 0 ;
        entity->type = item.type ;
        entity->value = item.value ;

        if( ptr == head ){
            entity->next = head ;
            head->fore = entity ;
            entity->fore = NULL ;
            head = entity ;
        }
        else if ( ptr == tail ){
            entity->next = NULL ;
            entity->fore = tail ;
            tail->next = entity ;
            tail = entity ;
        }
        else{
            entity->next = ptr ;
            entity->fore = ptr->fore;
            ptr->fore->next = entity;       
            ptr->fore = entity ;
        }
        count++;
    }

    return 1 ;
}

    //   同时也注意在删除时也有三种情况
bool List::purge ( int pos , Elem & item ){

Elem * ptr = NULL ;
if( pos >= count || pos < 0)
    return 0 ;
else{
    ptr = head ;
    while(pos--) ptr = ptr->next ;

    if( ptr == head ){
        ptr->next->fore = NULL ;
        ptr = ptr->next ;
        delete head ;
        head = ptr ;
    }
    else if( ptr == tail ){
        ptr->fore->next = NULL ;
        ptr = ptr->fore ;
        delete tail ;
        tail = ptr ;
    }
    else{
    #include "list.h"
#include<iostream>

#include<stdio.h>

void innershow(Elem * ptr)
{
printf(" in function \n");
std::cout<<"Type:";
switch (ptr->type){
case(0): printf("int value:%d\n",ptr->value); break;
case(1): printf("short value:%d\n",ptr->value); break;
case(2): printf("char value:%c\n",ptr->value); break;
case(3): printf("pointer value:%p\n",ptr->value); break;
case(4): printf("double value:%f\n",ptr->value); break;
case(5): printf("float value:%f\n",ptr->value); break;
default: printf("UNKNOWN value:%p\n",ptr->value); break;
}
}

// function well !
bool List::push(Elem & item){
Elem * entity = new Elem ;
if( entity == NULL )
return 0 ;
entity->type = item.type ;
entity->value = item.value ;
count++;
if(head == NULL ){
entity->fore = NULL ;
head = tail = entity ;
}
else{
entity->fore = tail ;
tail->next = entity ;
tail = entity ;
}

entity->next = NULL;

return 1 ;

}

// function well !
bool List::pop( Elem & item ){
Elem * ptr ;
if ( !count ) return 0;
item.type = tail->type ;
item.value= tail->value;
if( head != tail ){
ptr = tail->fore ;
tail->fore->next = NULL ;
delete tail ;
tail = ptr ;
}
else{
delete tail ;
head = tail = NULL;
}

count--;

return 1;

}
// function well 在插入时有三种情况,注意了
bool List::insert( int pos , Elem & item ){
Elem * ptr = NULL ;
if( pos > count || pos < 0)
return 0 ;
if ( pos == count )
push(item);
else{
ptr = head ;
while(pos--) ptr = ptr->next ;

    Elem * entity = new Elem ;
    if( entity == NULL )
    return 0 ;
    entity->type = item.type ;
    entity->value = item.value ;

    if( ptr == head ){
        entity->next = head ;
        head->fore = entity ;
        entity->fore = NULL ;
        head = entity ;
    }
    else if ( ptr == tail ){
        entity->next = NULL ;
        entity->fore = tail ;
        tail->next = entity ;
        tail = entity ;
    }
    else{
        entity->next = ptr ;
        entity->fore = ptr->fore;
        ptr->fore->next = entity;       
        ptr->fore = entity ;
    }
    count++;
}

return 1 ;

}

扫描二维码关注公众号,回复: 1759588 查看本文章

// 同时也注意在删除时也有三种情况
bool List::purge ( int pos , Elem & item ){

Elem * ptr = NULL ;
if( pos >= count || pos < 0)
    return 0 ;
else{
    ptr = head ;
    while(pos--) ptr = ptr->next ;

    if( ptr == head ){
        ptr->next->fore = NULL ;
        ptr = ptr->next ;
        ptr->fore->next = ptr->next ;
        ptr->next->fore = ptr->fore ;
        delete ptr;
    }
    count--;
}

return 1 ;

}

bool List::getpos( int pos , Elem & item ){
int count ;
Elem * ptr = NULL ;
if( pos >= count || pos < 0)
return 0 ;
else{
ptr = head ;
while(pos--) ptr = ptr->next ;

    item.type = ptr->type ;
    item.value = ptr->value;
}

return 1 ;

}

bool List::isempty(){
return count==0;
}

void List::reverse(){
Elem ptr = head ;
Elem
swap ,* next ;
while( ptr ){
next = ptr->next ;
swap = ptr->fore ;
ptr->fore = ptr->next ;
ptr->next = swap ;
ptr = next ;
}
swap = head ;
head = tail ;
tail = swap ;
}

void List::show() const{
Elem ptr = head ;
Elem
back ;
std::cout<<"List items......\n";
while(ptr){
innershow(ptr);
ptr = ptr->next ;
}
std::cout<<"***\n";
}

List::~List(){
count = 0 ;
Elem ptr = head ;
Elem
back ;
while(ptr){
back = ptr ;
ptr = ptr->next ;
delete back;
}
}

猜你喜欢

转载自blog.51cto.com/13824643/2132622