网站专业销售团队介绍,如何开设网站,广西造建设工程协会网站,全国知名网在C语言中#xff0c;顺序队列是一种数据结构#xff0c;它是一种先进先出#xff08;FIFO#xff09;的线性表。顺序队列通常使用数组来实现#xff0c;具有以下特点#xff1a;
队列元素的插入操作#xff08;入队#xff09;只能在队尾进行#xff0c;而删除操作顺序队列是一种数据结构它是一种先进先出FIFO的线性表。顺序队列通常使用数组来实现具有以下特点
队列元素的插入操作入队只能在队尾进行而删除操作出队只能在队首进行。队列有一个固定的大小一旦队列满了就无法插入新的元素。队列会随着元素的出队操作而缩短随着元素的入队操作而延长。
在C语言中顺序队列通常通过数组和两个指针分别指向队首和队尾来实现。入队操作通常会使队尾指针向后移动并将新元素放入队尾而出队操作会使队首指针向后移动同时返回队首元素并将队首元素从队列中删除。
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
#includestdlib.h
#includedongtaishuzu.h
#define MAX 1024
typedef void* seqQueue;
seqQueue init_seqqueue()
{dynaymicArray* arr init_dynamicArray(MAX);return (void*)arr;
}
//入队-》尾插
void push_seqqueue(seqQueue queue,void*data)
{if (queue NULL){return;}dynaymicArray* array (dynaymicArray*)queue;if (array-m_size MAX){return;}insert_dynamicArray(array, data, array-m_size);
}
//出队 头删
void pop_seqqueue(seqQueue queue)
{if (queue NULL){return;}dynaymicArray* array (dynaymicArray*)queue;if (array-m_size 0){return;}remove_dynamicArray(array, 0);
}
//返回对头
void* front_seqqueue(seqQueue queue)
{if (queue NULL){return NULL;}dynaymicArray* array (dynaymicArray*)queue;return array-pAddr[0];
}
//返回队尾
void* back_seqqueue(seqQueue queue)
{if (queue NULL){return NULL;}dynaymicArray* array (dynaymicArray*)queue;return array-pAddr[array-m_size - 1];
}
int isEmpty(seqQueue queue)
{if (queue NULL){return -1;}dynaymicArray* array (dynaymicArray*)queue;if (array-m_size 0){return 1;}return 0;
}
int size_seqqueue(seqQueue queue)
{if (queue NULL){return -1;}dynaymicArray* array (dynaymicArray*)queue;return array-m_size;
}
void destroy_seqqueue(seqQueue queue)
{if (queue NULL){return;}// 释放动态数组的内存free(queue); // 释放队列的内存queue NULL; // 将指针置为 NULL
}
struct person
{char name[64];int age;
};
void test01()
{seqQueue myqueue init_seqqueue();struct person p6 { aaa,18 };struct person p7 { bbb,123 };struct person p8 { ccc,24 };struct person p9 { ddd,25 };push_seqqueue(myqueue, p6);push_seqqueue(myqueue, p7);push_seqqueue(myqueue, p8);push_seqqueue(myqueue, p9);printf(大小%d\n, size_seqqueue(myqueue));while (!isEmpty(myqueue)){struct person* p1 (struct person*)front_seqqueue(myqueue);printf(队头名字%s,年龄%d\n, p1-name, p1-age);struct person* p2 (struct person*)back_seqqueue(myqueue);printf(队尾名字%s,年龄%d\n, p2-name, p2-age);printf(-------\n);pop_seqqueue(myqueue);}printf(大小%d\n, size_seqqueue(myqueue));destroy_seqqueue(myqueue); // 销毁队列
}
int main()
{test01();return 0;
}
这是.h文件
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#includestdio.h
#includestring.h
#includestdlib.h
typedef struct dynaymicArray
{void** pAddr;int m_capacity;int m_size;
}dynaymicArray;
//struct person
//{
// char name[64];
// int age;
//};
//dynaymicArray* init_dynamicArray(int capacity);
//void insert_dynamicArray(dynaymicArray* arr, void* data, int pos);
//void foreach_dynamicArray(dynaymicArray* arr, void(*myprint)(void*));
//void remove_dynamicArray(dynaymicArray* arr, int pos);
//void removevalue_dynamicArray(dynaymicArray* arr, void* data, int(*mycompare)(void*, void*));
dynaymicArray* init_dynamicArray(int capacity)
{if (capacity 0){return NULL;}dynaymicArray* arr (dynaymicArray*)malloc(sizeof(dynaymicArray));if (arr NULL){return NULL;}arr-m_capacity 0;arr-m_size 0;arr-pAddr (void**) malloc(sizeof(void*) * capacity);return arr;
}
void insert_dynamicArray(dynaymicArray* arr, void* data, int pos)
{if (data NULL){return;}if (pos0 || posarr-m_size){return;}if (arr-m_size arr-m_capacity){int newcapacity arr-m_capacity * 2;void** newspace (void**) malloc(sizeof(void*) * newcapacity);memcpy(newspace, arr-pAddr, sizeof(void*) * arr-m_capacity);free(arr-pAddr);arr-pAddr newspace;arr-m_capacity newcapacity;}for (int i arr-m_size - 1; i pos; i--){arr-pAddr[i 1] arr-pAddr[i];}arr-pAddr[pos] data;arr-m_size;
}
void foreach_dynamicArray(dynaymicArray* arr, void(*myprint)(void*))
{for (int i 0; i arr-m_size; i){myprint(arr-pAddr[i]);}
}void remove_dynamicArray(dynaymicArray* arr, int pos)
{if (pos0 || posarr-m_size - 1){return;}for (int i pos; i arr-m_size; i){arr-pAddr[i] arr-pAddr[i 1];}arr-m_size--;
}
void removevalue_dynamicArray(dynaymicArray* arr, void* data, int(*mycompare)(void*, void*))
{for (int i 0; i arr-m_size; i){if (mycompare(arr-pAddr[i], data)){remove_dynamicArray(arr, i);arr-m_size--;break;}}
}