データ構造学習の行列(チェーン記憶)
5338 ワード
【要約】前のブログでは主に循環列を検討していますが、循環列は事前にスペースを申請していますので、利用期間は釈放できません.しかし、チェーンの列は、毎回申請とノードの解放ができます.列の長さを予見できない時は、チェーンを使った行列を考えることができます.(1)キューデータ構造の設計
/* */
typedef struct _QUEUE_NODE
{
int pData;
struct _QUEUE_NODE *next;
}QUEUE_NODE,*QUEUEPtr;
/* */
typedef struct LinkQueue
{
QUEUEPtr head;
QUEUEPtr tail;
int count;
}LinkQueue;
(2)初期化キューSTATUS init_queue(LinkQueue* pQueueNode)
{
pQueueNode->head = (QueuePtr)malloc(sizeof(QUEUE_NODE)); //
if(!pQueueNode->head) //
return FALSE;
pQueueNode->tail = pQueueNode->head;
pQueueNode->head->next=NULL; // next
pQueueNode->count = 0;
return TRUE;
}
(3)データをキューに押し込むSTATUS insert_queue(LinkQueue* pQueueNode, int value)
{
QUEUEPtr s = (QUEUEPtr)malloc(sizeof(QUEUE_NODE));
if(NULL == s)
return FALSE;
s->data = value;
s->next = NULL;
pQueueNode->tail->next = s;
pQueueNode->tail = s; //
pQueueNode->count ++;
return TRUE;
}
(4)データをキューにイジェクトするSTATUS get_queue_data(LinkQueue* pQueueNode, int* value)
{
QUEUEPtr s = NULL;
if(NULL == pQueueNode || NULL == value || pQueueNode->head == pQueueNode->tail)
return FALSE;
if(0 == pQueueNode->count)
return FALSE;
*value = pQueueNode->head; //
s = pQueueNode->head; //
pQueueNode->head = s->next;//
/* s = pQueueNode->head->next; // pQueueNode->head = s->next;// if(pQueueNode->tail==s) // { pQueueNode->tail = pQueueNode->head } */
free(s);
s = NULL;
pQueueNode-> count--;
return TRUE;
}
(5)現在のキューのデータを統計します.int get_total_number(const LinkQueue* pQueueNode)
{
if(NULL == pQueueNode)
return 0;
return pQueueNode->count;
}