关于上述问题呢,经过思考,我觉得可以用队列来实现,队列的概念是什么我想我就不在赘述了吧,任何一本数据结构课本上都会有,队列实际上和我们现实生活中的队列是一样的,只是不能像生活中的队伍一样可以插队,或者中途离去。
其实我想解决的方法是广度优先算法,其中队列只是存储的数据结构。先遍历同一层深度的文件夹,然后将这一层文件夹的子文件夹再入队,这个操作一直进行下去,直到最后一个文件夹。
这个队列是一个循环队列,因为伴随着程序的运行,有元素不断的入队,有元素不断的出队,如果文件夹足够多,那么总是会出现队列被用尽的情况,其实这种用尽并不是真的用尽,而是前面的很多的空间并没有用,造成了空间的浪费,那么我们可以用循环的方法来实现,来制造一个循环队列,但是这会出现一种情况,队列为空时,front=rear,而队列为满的时候也是front=rear;这样我们牺牲一个存储单元来实现这个判断,即:(rear+1)%MAXSIZE==front时为满,front==rear时为空。出队时: front=(front+1)/MAXSIZE,入队时:rear=(rear+1)/MAXSIZE。
下面给出队列的实现代码,首先声明的是这个队列并不是适合所有情况,这个队列是有针对性的,只是适用我这个问题的解决。
代码:// Queue.h: interface for the Queue class.
//
//
class Queue
{
private:
typedef struct _FILENAME{
TCHAR filename[50];
}FILENAME;
INT front;
INT rear;
INT QueueSize;
FILENAME *FileName;
public:
BOOL QueueFull();
BOOL DeleteQueue();
BOOL OutQueue(TCHAR *str);
BOOL InQueue(TCHAR *str);
BOOL QueueEmpty();
BOOL ClearQueue();
BOOL InitQueue(INT size);
Queue();
virtual ~Queue();
};// Queue.cpp: implementation of the Queue class.
//
//
//
//
class Queue
{
private:
typedef struct _FILENAME{
TCHAR filename[50];
}FILENAME;
INT front;
INT rear;
INT QueueSize;
FILENAME *FileName;
public:
BOOL QueueFull();
BOOL DeleteQueue();
BOOL OutQueue(TCHAR *str);
BOOL InQueue(TCHAR *str);
BOOL QueueEmpty();
BOOL ClearQueue();
BOOL InitQueue(INT size);
Queue();
virtual ~Queue();