#ifndef __PS_DLL_H_
#define __PS_DLL_H_
#include <iostream>
using namespace std;
template <class T>
class DLL;
template <class T>
class Node{
T _data;
Node<T>* _prev;
Node<T>* _next;
Node(T data, Node<T>* prev=(Node<T>*)0, Node<T>* next=(Node<T>*)0);// just incase, review later
friend class DLL<T>;
};
template <class T>
class DLL{
Node<T>* _head;
Node<T>* _curr;
Node<T>* _tail;
void copy(DLL<T>& D);
public:
DLL();
DLL(DLL<T>& D);
virtual ~DLL();
bool isEmpty();
void append(T data);
DLL<T>& operator=(DLL<T>& D);
T remove(); // removes the current node and returns the data
bool del(); // removes the current node returns false if is empty
void insert(T data); // insterts before current
bool goHead();
bool goTail();
bool goNext();
bool goPrev();
T visit(); // returns the current data
int dept() const; // returns the number of Nodes
};
template <class T>
Node<T>::Node(T data, Node<T>* prev, Node<T>* next){
_data = data;
_prev = prev;
_next = next;
}
template <class T>
DLL<T>::DLL(){
_head = _tail = _curr = 0;
}
template <class T>
DLL<T>::~DLL(){
while(del());
}
template <class T>
void DLL<T>::copy(DLL<T>& D){
int curpos;
for(curpos=0;D.goPrev();curpos++); // findout where is current
if(!D.isEmpty()){
do{
this->append(D.visit());
}while(D.goNext());
}
for(D.goHead(), this->goHead(); curpos; D.goNext(), this->goNext(),curpos--);
}
template <class T>
DLL<T>::DLL(DLL<T>& D){
_head = _tail = _curr = 0;
this->copy(D);
}
template <class T>
DLL<T>& DLL<T>::operator=(DLL<T>& D){
while(del());
this->copy(D);
return *this;
}
template <class T>
void DLL<T>::append(T data){
Node<T>* newnode = new Node<T>(data);
if(_tail){ // ! empty
_tail->_next = newnode;
newnode->_prev = _tail;
_tail = _curr = newnode;
}
else{
_tail = _curr = _head = newnode;
}
}
template <class T>
T DLL<T>::remove(){
T data = visit();
del();
return data;
}
template <class T>
bool DLL<T>::del(){
bool ok = false;
if(_curr){
ok = true;
Node<T>* todel = _curr;
(_curr->_next) ? _curr->_next->_prev = _curr->_prev : _tail = _tail->_prev;
(_curr->_prev) ? _curr->_prev->_next = _curr->_next : _head = _head->_next;
(_curr->_next) ? _curr = _curr->_next : _curr = _curr->_prev;
delete todel;
}
return ok;
}
template <class T>
void DLL<T>::insert(T data){
Node<T>* toInsert = new Node<T>(data);
(_curr->_prev) ? (_curr->_prev->_next = toInsert) : (_head = toInsert);
toInsert->_prev = _curr->_prev;
toInsert->_next = _curr;
_curr->_prev = toInsert;
_curr = toInsert;
}
template <class T>
T DLL<T>::visit(){ // retruns data of current
return _curr->_data;
}
template <class T>
bool DLL<T>::goHead(){
return ((_head) && (_curr = _head)) ? true : false;
}
template <class T>
bool DLL<T>::goTail(){
return ((_tail) && (_curr = _tail)) ? true : false;
}
template <class T>
bool DLL<T>::goNext(){
return ((_curr->_next) && (_curr = _curr->_next)) ? true : false;
}
template <class T>
bool DLL<T>::goPrev(){
return ((_curr->_prev) && (_curr = _curr->_prev)) ? true : false;
}
template <class T>
bool DLL<T>::isEmpty(){
return !_curr;
}
template <class T>
void printList(DLL<T>& d){
d.goHead();
}
template <class T>
ostream& operator<<(ostream& os, DLL<T>& d){
int cur;
bool done = false;
for(cur=0;d.goPrev();cur++); // findout where is current
do{
os<<d.visit();
done = !d.goNext();
if(!done){
os<<", ";
}
}while(!done);
for(d.goHead();cur;d.goNext(), cur--); // set current to what it was before
return os;
}
template <class T>
ostream& operator>>(ostream& os, DLL<T>& d){ // printing in reverse!!!!!
int cur;
bool done = false;
for(cur=0;d.goNext();cur++); // findout where is current
do{
os<<d.visit();
done = !d.goPrev();
if(!done){
os<<", ";
}
}while(!done);
for(d.goTail();cur;d.goPrev(), cur--); // set current to what it was before
return os;
}
#endif
#include "dll.h"
int main(){
DLL<int> d;
for(int i=0;i<10;i++){
d.append(i+1);
}
cout<<d<<endl;
d.goHead();
d.insert(1000);
d.goNext();
d.insert(2000);
cout<<d<<endl;
cout>>d<<endl;
cout<<d.remove()<<endl;
cout<<d<<endl;
return 0;
}
OOP344- The actual way of learning programming
Tuesday, 9 April 2013
Saturday, 30 March 2013
Problem in project .exe file
Everything is working perfectly but do not know this project.exe is giving me error. I tried to build new projects but still having same problem. Such a crazy headache......... :(
Monday, 25 March 2013
CDirection issue Solved
Hi friends
Sorry for CDirection issue. I did something wrong. Actually I forgot to use namespace. That's why I was getting error. Anyways it is solved.
Thank you
Pankaj Sama
Thursday, 21 March 2013
Getting CDirection Error
Hi friends
I am doing my CMenuItem. I updated the cuigh.h as on wiki page but I am getting an error "Cdirection is not defined" in Cframe.h. But it is prototype in cuigh.h as
"enum CDirection {centre, left, right, up, down};
Can somebody help me with that. Looking forward for reply
Thanks
Pankaj Sama
I am doing my CMenuItem. I updated the cuigh.h as on wiki page but I am getting an error "Cdirection is not defined" in Cframe.h. But it is prototype in cuigh.h as
"enum CDirection {centre, left, right, up, down};
Can somebody help me with that. Looking forward for reply
Thanks
Pankaj Sama
Wednesday, 20 March 2013
Convert Bits value of a variable(any type) to Hex
Program is written in the purpose of Converting Bits value of a variable to Hex
#include <iostream>
using namespace std;
void bitDump(void* address, unsigned int size);
int main(){
long double ld = 12345.123456;
bitDump(&ld, sizeof(ld)); // print the bit pattern (cool if formatted)
return 0;
}
//Loop through size and convert each char to 8 binary digits.
void bitDump(void* var, unsigned int size){
char* addres = (char*) var;
int count = 1;
for(int i = 0; i < sizeof(size); i++){
unsigned int mask = 1 << 7;
while(m){//convert each char to 8 binary digits
printf("%d", !!(addres[i] & mask));
m = m >> 1;
if(count == 4)
{
putchar(' ');
cnt = 1;
}
else
{
count++;
}
}
putchar('\n');
}
BitPrint Function
Function to Print the Bits of a variable.....
void prnBits(unsigned int val)
{
unsigned int m = 1 << sizeof(val)*8 - 1;
while(m)
{
printf("%d\n", (val & m) && 1);
m = m >> 1;
}
}
SetBits Function
Fuction to set bits on given no of bit
void setBits(unsigned int&, int BitNo, bool value)
{
if(value)
{
v = v | (1 << (BitNo - 1));
}
else
{
v = v & ~(1 << (BitNo - 1));
}
}
Subscribe to:
Posts (Atom)