データ構造---チェーン式キューの実現
5422 ワード
名前の通り、チェーンの列はチェーンの形で実現されます.順番待ちとの違いは空間オーバーフローを避けることです.
また、順番待ちの基本的な操作の空間の複雑さはO(1)であり、チェーン列に挿入操作する時間の複雑さはO(n)である.構造体宣言 具体的な関数宣言 具体的な関数は を実現します.
初期化と廃棄は、外部ポインタの指向を変更するため、メモリ空間を2段階のポインタで受信し、メモリ空間を解放するには、メモリ空間に向けたポインタを持てばいいです.この空間を解放したら、外部ポインタを空にして、野針の問題を避けるべきです.
また、順番待ちの基本的な操作の空間の複雑さはO(1)であり、チェーン列に挿入操作する時間の複雑さはO(n)である.
typedef char LinkListType;
typedef struct LinkListQueue{
LinkListType data;
struct LinkListQueue* next;//
}LinkListQueue;
//
LinkListQueue* CreateNode(LinkListType value);
//
void LinkListInit(LinkListQueue* head);
//
void DestroyNode(LinkListQueue* node);
//
void LinkListQueuePush(LinkListQueue** head,LinkListType value);
//
void LinkListQueuePop(LinkListQueue** head);
//
int LinkListQueueGetTop(LinkListQueue* head,LinkListType* value);
初期化と廃棄は、外部ポインタの指向を変更するため、メモリ空間を2段階のポインタで受信し、メモリ空間を解放するには、メモリ空間に向けたポインタを持てばいいです.この空間を解放したら、外部ポインタを空にして、野針の問題を避けるべきです.
void LinkListInit(LinkListQueue** head)
{
if(head == NULL)
{
//
return;
}
*head = NULL;
}
void DestroyNode(LinkListQueue* node)
{
free(node);
}
新しいノードを作成LinkListQueue* CreateNode(LinkListType value)
{
LinkListQueue* newNode = (LinkListQueue*)malloc(sizeof(LinkListQueue));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
列に入る//
void LinkListQueuePush(LinkListQueue** head,LinkListType value)
{
if(head==NULL)
{
//
return;
}
if(*head==NULL)
{
//
*head = CreateNode(value);
return;
}
LinkListQueue* cur = *head;
while(cur->next!=NULL)
{
cur=cur->next;
}
cur->next = CreateNode(value);
}
//
{
if(head==NULL)
{
//
return;
}
if(*head==NULL)
{
//
return;
}
LinkListQueue* cur = *head;
*head = (*head)->next;
DestroyNode(cur);
// cur , , ,
}
チームの最初の要素を取るint LinkListQueueGetTop(LinkListQueue* head,LinkListType* value)
{
if(head==NULL)
{
//
return 0;
}
*value = head->data;
return 1;
}