数据结构-队列2-链式存储
生活随笔
收集整理的這篇文章主要介紹了
数据结构-队列2-链式存储
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隊列鏈式存儲方案一
seqList.h
#include<stdlib.h> #include<stdio.h>struct SEQLINKNODE {struct SEQLINKNODE* next; }; struct SEQLINKLIST {struct SEQLINKNODE head; //頭結點struct SEQLINKNODE* back; //尾結點int size; };typedef void* LinkQueue;//初始化 LinkQueue Init_SeqLinkList();//從隊尾壓入元素 void Push_SeqLinkList(LinkQueue seq, void* data);//彈出隊頭元素 void Pop_SeqLinkList(LinkQueue seq);//取隊尾元素 LinkQueue Back_SeqLinkList(LinkQueue seq);//取隊頭元素 LinkQueue Front_SeqLinkList(LinkQueue seq);//獲取大小 int Size_SeqLinkList(LinkQueue seq);//清空 void Clear_SeqLinkList(LinkQueue seq);//銷毀 void FreeSpace_SeqLinkList(LinkQueue seq);seqList.c
#include"seqList.h"//初始化 LinkQueue Init_SeqLinkList() {struct SEQLINKLIST* seq = malloc(sizeof(struct SEQLINKLIST));if (seq == NULL){return NULL;}seq->head.next = NULL; //指針域為空// 我 seq->back = seq->head;seq->back = &seq->head; //尾結點初始化 就是在頭結點seq->size = 0;return seq;}//從隊尾壓入元素 void Push_SeqLinkList(LinkQueue seq, void* data) {if (seq == NULL){return;}if (data == NULL){return;}struct SEQLINKLIST* myQueue = seq;struct SEQLINKNODE* node =data;//插入新節點myQueue->back->next = node; //問題1:有點繞node->next = NULL;myQueue->back = node;myQueue->size++; }//彈出隊頭元素 void Pop_SeqLinkList(LinkQueue seq) {if (seq == NULL){return;}struct SEQLINKLIST* myQueue = seq;//第一個有數據的節點struct SEQLINKNODE* pFirst = myQueue->head.next;//更新指針的指向myQueue->head.next = pFirst->next; //問題2:不知道循環截止條件myQueue->size--; }//取隊尾元素 LinkQueue Back_SeqLinkList(LinkQueue seq) {if (seq == NULL){return NULL;}struct SEQLINKLIST* myQueue = seq;return myQueue->back; //seq->back->next 指向NULL }//取隊頭元素 LinkQueue Front_SeqLinkList(LinkQueue seq) {if (seq == NULL){return NULL;}struct SEQLINKLIST* myQueue = seq;return myQueue->head.next; }//獲取大小 int Size_SeqLinkList(LinkQueue seq) {if (seq == NULL){return;}struct SEQLINKLIST* myQueue = seq;return myQueue->size; }//清空 void Clear_SeqLinkList(LinkQueue seq) {if (seq == NULL){return;}struct SEQLINKLIST* myQueue = seq;myQueue->head.next = NULL;myQueue->size = 0; }//銷毀 void FreeSpace_SeqLinkList(LinkQueue* seq) {if (seq == NULL){return;}struct SEQLINKLIST* myQueue = seq;free(myQueue); }錯誤實現seqListme.c:
#include"seqList.h"//初始化 SeqLinkList* Init_SeqLinkList() {SeqLinkList* seq = (SeqLinkList*)malloc(sizeof(SeqLinkList));seq->head->next = NULL;seq->back = seq->head;seq->size = 0;return seq;}//從隊尾壓入元素 void Push_SeqLinkList(SeqLinkList* seq, void* data) {if (seq == NULL){return;}if (data == NULL){return;}data = seq->back->next; //問題1:有點繞seq->back->next = NULL;seq->size++; }//彈出隊頭元素 void Pop_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return;}seq->head->next = seq->head->next->next; //問題2:不知道循環截止條件seq->size--; }//取隊尾元素 SeqLinkList* Back_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return NULL;}return seq->back; //seq->back->next 指向NULL }//取隊頭元素 SeqLinkList* Front_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return NULL;}return seq->head->next; }//獲取大小 int Size_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return;}return seq->size; }//清空 void Clear_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return;}seq->head->next = NULL;seq->size = 0; }//銷毀 void FreeSpace_SeqLinkList(SeqLinkList* seq) {if (seq == NULL){return;}free(seq); }鏈式存儲隊列.c
#define _CRT_SECURE_NO_WARNINGS #include"seqList.h" #include<string.h>typedef struct PERSON {void* node;char name[64];int age; }Person;int main() {Person p1 = { NULL, "aaa",10 };Person p2 = { NULL,"bbb",20 };Person p3 = { NULL,"ccc",30 };Person p4 = { NULL,"ddd",40 };Person p5 = { NULL,"eee",50 };LinkQueue seq = Init_SeqLinkList();Push_SeqLinkList(seq, &p1);Push_SeqLinkList(seq, &p2);Push_SeqLinkList(seq, &p3);Push_SeqLinkList(seq, &p4);Push_SeqLinkList(seq, &p5);Person* pf = (Person*)Front_SeqLinkList(seq);printf("隊頭元素Name:%s Age:%d\n", pf->name, pf->age);Person* pb = (Person*)Back_SeqLinkList(seq);printf("隊尾元素Name:%s Age:%d\n", pb->name, pb->age);while(Size_SeqLinkList(seq)>0){Person* p=(Person*)Front_SeqLinkList(seq);printf("Name:%s Age:%d\n", p->name, p ->age);Pop_SeqLinkList(seq);}FreeSpace_SeqLinkList(seq);return 0;}運行結果:
隊列鏈式存儲方案二
queueList.h
#include<stdlib.h> #include<stdio.h>typedef struct QUEUELINKNODE {struct QUEUELINKNODE* next; }QueueLinkNode; typedef struct QUEUELINKLIST {struct QUEUELINKNODE head; //頭結點。head不需要是指針形式struct QUEUELINKNODE* back; //尾結點int size; }QueueLinkList;//初始化 QueueLinkList* Init_QUEUELinkList();//從隊尾壓入元素 void Push_QUEUELinkList(QueueLinkList* QUEUE, void* data);//彈出隊頭元素 void Pop_QUEUELinkList(QueueLinkList* QUEUE);//取隊尾元素 QueueLinkList* Back_QUEUELinkList(QueueLinkList* QUEUE);//取隊頭元素 QueueLinkList* Front_QUEUELinkList(QueueLinkList* QUEUE);//獲取大小 int Size_QUEUELinkList(QueueLinkList* QUEUE);//清空 void Clear_QUEUELinkList(QueueLinkList* QUEUE);//銷毀 void FreeSpace_QUEUELinkList(QueueLinkList* QUEUE);queueList.c
#include<stdlib.h> #include"queueList.h"//初始化 QueueLinkList* Init_QUEUELinkList() {QueueLinkList* queue = (QueueLinkList*)malloc(sizeof(QueueLinkList));queue->head.next = NULL;queue->size = 0;//queue->head = &queue->back; 錯誤queue->back = &queue->head; //正確return queue; }//從隊尾壓入元素 void Push_QUEUELinkList(QueueLinkList* queue, void* data) {if (queue == NULL){return;}if (data == NULL){return;}QueueLinkNode *newnode = data;queue->back->next = newnode;newnode->next = NULL;queue->back = newnode;queue->size++;}//彈出隊頭元素 void Pop_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}QueueLinkNode *pFirst = queue->head.next; //第一個有數據的節點queue->head.next = pFirst->next; //頭指針指向有數據節點的下一個結點queue->size--; }//取隊尾元素 QueueLinkList* Back_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}return queue->back; }//取隊頭元素 QueueLinkList* Front_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}return queue->head.next; }//獲取大小 int Size_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}return queue->size; }//清空 void Clear_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}queue->head.next = NULL;queue->size = 0; }//銷毀 void FreeSpace_QUEUELinkList(QueueLinkList* queue) {if (queue == NULL){return;}free(queue); }鏈式存儲隊列2.c
#include"queueList.h"typedef struct PERSON {QueueLinkNode node;char name[64];int age; }Person;int main() {Person p1 = { NULL, "aaa",10 };Person p2 = { NULL,"bbb",20 };Person p3 = { NULL,"ccc",30 };Person p4 = { NULL,"ddd",40 };Person p5 = { NULL,"eee",50 };QueueLinkList* queue = Init_QUEUELinkList();Push_QUEUELinkList(queue, &p1);Push_QUEUELinkList(queue, &p2);Push_QUEUELinkList(queue, &p3);Push_QUEUELinkList(queue, &p4);Push_QUEUELinkList(queue, &p5);Person* pf = (Person*)Front_QUEUELinkList(queue);printf("隊頭元素Name:%s Age:%d\n", pf->name, pf->age);Person* pb = (Person*)Back_QUEUELinkList(queue);printf("隊尾元素Name:%s Age:%d\n", pb->name, pb->age);while (Size_QUEUELinkList(queue)>0){Person* p = (Person*)Front_QUEUELinkList(queue);printf("Name:%s Age:%d\n", p->name, p->age);Pop_QUEUELinkList(queue);}FreeSpace_QUEUELinkList(queue);return 0; }總結
以上是生活随笔為你收集整理的数据结构-队列2-链式存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: module 'queue' has n
- 下一篇: excel进度条与百分比不符_Excel