📄 circlequeue.cpp
字号:
#include <unistd.h>#include <fcntl.h>#include "CircleQueue.h"CircleQueue::CircleQueue(int size){ num = size; cur = tail = head = 0; num_cur = 0;}char* CircleQueue::getCur(void){ if(cur) { char* o = new char[strlen(cur->ptr)+1]; strcpy(o,cur->ptr); return o; } return 0;}void CircleQueue::incCur(void){ if(cur) cur = (cur==head)?tail:cur->pre;}void CircleQueue::devCur(void){ if(cur) cur = (cur==tail)?head:cur->next;}void CircleQueue::inset(char* p){ if(!head) cur = tail = head = new Node_Queue(p,0,0); else if(tail == head) head->next = tail->pre = cur = head = head->inset(p); else cur = head = head->inset(p); num_cur++; if(num_cur > num ) del();}void CircleQueue::initffile(char* filepath){ head = 0; cur = 0; if(!filepath) return; int fid = open(filepath,O_RDONLY); if(fid >= 0) { struct stat fileinfo; fstat(fid,&fileinfo); int SIZE = fileinfo.st_size; char a; int start = 0; do { read(fid,&a,1); start++; }while(a!='\n'); for(int i = start;i < (SIZE - 1); i++) { read(fid,&a,1); if(a == '\n') { lseek(fid,start,SEEK_SET); char* work = new char[i - start + 1]; read(fid,work,i - start + 1); work[i - start] = 0; inset(work); start = i+1; } } close(fid); }}void CircleQueue::del(void){ if(tail) { tail = tail->del(); num_cur--; } if(!num_cur) cur=head=0;}void CircleQueue::setSize(int size){ if(size <= 0) //If size <= 0, I will clear the CircleQueue. { for(int i = 0; i < num_cur;i++) del(); num=0; num_cur = 0; cur=tail=head=0; } else { num = size; for(int i = 0; i < num_cur-size;i++) del(); }}void CircleQueue::show(int fid, bool reversFlag){ if(fid < 0 || !head) return; if(!reversFlag) { Node_Queue* work = head; do { write(fid, work->ptr, strlen(work->ptr)); write(fid, "\n", 1); work = work->next; }while(work != tail); write(fid, work->ptr, strlen(work->ptr)); write(fid, "\n", 1); write(fid, "\0", 1); } else //show as revers order.tail first, head last. { Node_Queue* work = tail; do { write(fid, work->ptr, strlen(work->ptr)); write(fid, "\n", 1); work = work->pre; }while(work != head); write(fid, work->ptr, strlen(work->ptr)); write(fid, "\n", 1); write(fid, "\0", 1); } return;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -