构建栈和队列
2018-01-29 16:48
302 查看
构架栈
构建队列
栈和队列的测试文件Test.c
栈的头文件Stack.h #pragma once #include<stdio.h> #include<windows.h> #include<assert.h> #define SInitsize 2 //栈初始分配内存 #define SExpend 4 //栈扩大增量 typedef int DataType; typedef struct Stack { DataType* _array; size_t _top;//栈顶 size_t _base;//栈底 }Stack; // 栈的实现接口 void StackInit(Stack* s);//栈的初始化 void StackPush(Stack* s, DataType x);//入栈 void StackPop(Stack* s); //出栈 DataType StackTop(Stack* s); //求栈顶元素 size_t StackSize(Stack* s);//栈的长度 int StackEmpty(Stack* s); //判断是否为空栈
Stack.c #define _CRT_SECURE_NO_WARNINGS 1 #include"Stack.h" void StackInit(Stack* s)//栈的初始化 { assert(s); s->_array = (DataType *)malloc(SInitsize * sizeof(DataType)); if (!s->_array) { printf("malloc failure\n"); } s->_base = SInitsize; s->_top = 0; } void StackPush(Stack* s, DataType x)//入栈 { assert(s); if (s->_top == s->_base) { s->_array = (DataType *)realloc(s->_array, (SInitsize + SExpend)*sizeof(DataType)); if (!s->_array) { printf("malloc failure\n"); } s->_base = SInitsize + SExpend; } s->_array[s->_top++] = x; } void StackPop(Stack* s)//出栈 { assert(s); if (s->_top > 0) { --s->_top; } } DataType StackTop(Stack* s)//求栈顶元素 { assert(s); return s->_array[s->_top - 1]; } size_t StackSize(Stack* s)//栈的长度 { assert(s); return s->_top; } int StackEmpty(Stack* s) //判断是否为空栈 { assert(s); if (s->_top == 0) { return 0; } return 1; }
构建队列
Queue.h #pragma once #include<stdio.h> #include<windows.h> #include<assert.h> typedef int DataType; typedef struct QueueNode { DataType _data; struct QueueNode* _next; }QueueNode; typedef struct Queue { QueueNode* _head; b4fc QueueNode* _tail; }Queue; void QueueInit(Queue* q);//队列的初始化 void QueuePush(Queue* q, DataType x);//队列的插入 void QueuePop(Queue* q);//队列删除 DataType QueueFront(Queue* q);//返回队列头 DataType QueueBack(Queue* q);//返回队列尾 size_t QueueSize(Queue* q);//队列的长度 int QueueEmpty(Queue* q);//判断队列是否为空
Queue.c #define _CRT_SECURE_NO_WARNINGS 1 #include"Queue.h" void QueueInit(Queue* q) { assert(q); q->_head = NULL; q->_tail = NULL; } void QueuePush(Queue* q, DataType x) { QueueNode *node = NULL; node = (QueueNode *)malloc(sizeof(QueueNode)); assert(node); node->_data = x; node->_next = NULL; if (q->_tail == NULL)//队列为空时 { q->_head = q->_tail = node; } else//队列不为空时 { q->_tail->_next = node; q->_tail = node; } } void QueuePop(Queue* q) { assert(q); QueueNode * next = NULL; if (q->_head == q->_tail) { if (q->_head) { free(q->_head); q->_head = q->_tail = NULL; } } else { next = q->_head->_next; free(q->_head); q->_head = next; } } DataType QueueFront(Queue* q) { assert(q); return q->_head->_data; } DataType QueueBack(Queue* q) { assert(q); return q->_tail->_data; } size_t QueueSize(Queue* q) { assert(q); size_t size = 0; QueueNode *cur = NULL; cur = q->_head; while (cur != NULL) { size++; cur = cur->_next; } return size; } int QueueEmpty(Queue* q) { assert(q); return q->_head == NULL ? 0 : 1; }
栈和队列的测试文件Test.c
#define _CRT_SECURE_NO_WARNINGS 1 #include"Stack.h" #include"Queue.h" Test1() { Stack s; StackInit(&s); StackPush(&s, 1); StackPush(&s, 2); StackPush(&s, 3); StackPush(&s, 4); while (StackEmpty(&s)) { printf("%d ", StackTop(&s)); StackPop(&s); } printf("\n"); } Test2() { Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush(&q, 3); QueuePush(&q, 4); printf("队列的长度为:%d\n", QueueSize(&q)); while (QueueEmpty(&q)) { printf("%d ", QueueFront(&q)); QueuePop(&q); } printf("\n"); } int main() { Test1(); Test2(); system("pause"); return 0; }
相关文章推荐
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇
- RabbitMQ+HAProxy构建高可用消息队列
- 使用两个栈构建一个队列
- Netty构建分布式消息队列实现原理浅析
- 抽象数据类型ADT之队列的构建
- 利用数据库存储订单、通知和任务,构建高性能队列
- C 代码----在MCU中构建消息队列
- 详解如何构建Promise队列实现异步函数顺序执行
- 基于TableStore(表格存储)构建简易海量Topic消息队列
- 《java并发编程实战》读书笔记11--构建自定义的同步工具,条件队列,Condition,AQS
- 构建循环队列(需判断队列满)
- [导入]构建WCF面向服务的应用程序系列课程(14):消息队列.zip(17.56 MB)
- IOS开发(66)之构建自己的分派队列
- 剑指 | 7-利用两个栈构建一个队列
- [代码笔记] python 之 堆栈与队列 _使用推导式构建
- Netty构建分布式消息队列实现原理浅析
- 从构建分布式秒杀系统聊聊Disruptor高性能队列
- c语言链队列的构建
- 使用数据库构建高性能队列用于存储订单、通知和任务(转)
- Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇