标签:表示 r++ real malloc def 保存 sizeof return int
#ifndef _STACK_H_
#define _STACK_H_
typedef int SElementType;
///顺序栈
#define STACK_INIT_SIZE 20
#define STACK_INCREMENT 10
typedef struct {
SElementType * base;
SElementType * top;
int stackSize;///当前栈的大小
}SqStack;///SequenceStack
///function--
void InitStack(SqStack * pSqStack);
void DestoryStack(SqStack * pSqStack);
void ClearStack(SqStack * pSqStack);
int IsStackEmpty(SqStack * pSqStack);
int GetStackLength(SqStack * pSqStack);
void GetStackTop(SqStack * pSqStack, SElementType * elem);
void PushStack(SqStack * pSqStack, SElementType elem);
void PopStack(SqStack * pSqStack, SElementType * elem);
#endif // ! _STACK_H_
#include <stdio.h>
#include <stdlib.h>
#include "Stack.h"
///初始化栈,创建容量为STACK_INIT_SIZE大小的栈
void InitStack(SqStack * pSqStack) {
pSqStack->base = (SElementType *)malloc(STACK_INIT_SIZE * sizeof(SElementType));
pSqStack->top = pSqStack->base;
pSqStack->stackSize = STACK_INIT_SIZE;
}
///销毁栈
void DestoryStack(SqStack * pSqStack) {
if (pSqStack->base != NULL) {
free(pSqStack->base);
pSqStack->base = NULL;
pSqStack->top = NULL;
pSqStack->stackSize = 0;
}
}
///清空栈
void ClearStack(SqStack * pSqStack) {
pSqStack->top = pSqStack->base;
}
///判断栈是否为空
int IsStackEmpty(SqStack * pSqStack) {
int iRet = -1;
if (pSqStack->base == pSqStack->top) {
iRet = 0;
}
return iRet;
}
///获取栈中元素长度
int GetStackLength(SqStack * pSqStack) {
int iRet = -1;
int length = pSqStack->top - pSqStack->base;
iRet = length;
return iRet;
}
///获取栈顶元素,但不出栈
void GetStackTop(SqStack * pSqStack, SElementType * elem) {
if (pSqStack->base != pSqStack->top) {
*elem = *(pSqStack->top - 1);
}
}
///压栈
void PushStack(SqStack * pSqStack, SElementType elem) {
if (pSqStack->top - pSqStack->base >= pSqStack->stackSize) {
pSqStack->base = (SElementType *)realloc(pSqStack->base, (pSqStack->stackSize + STACK_INCREMENT) * sizeof(SElementType));
pSqStack->stackSize += STACK_INCREMENT;
pSqStack->top = pSqStack->base + pSqStack->stackSize;
}
*pSqStack->top++ = elem;
}
///出栈
void PopStack(SqStack * pSqStack, SElementType * elem) {
if (pSqStack->base != pSqStack->top) {
*elem = *(--pSqStack->top);
}
}
#ifndef _QUEUE_H_
#define _QUEUE_H_
typedef int QElementType;
///结点结构类型
typedef struct QNode {
QElementType elem;
QNode * next;
}QNode, * QueuePtr;
///链表结构
typedef struct QLink {
QueuePtr front; //头指针
QueuePtr rear; //尾指针
}LinkQueue;
///function--
void InitLinkQueue(LinkQueue * plQueue);
void DestoryLinkQueue(LinkQueue * plQueue);
void ClearLinkQueue(LinkQueue * plQueue);
int IsLinkQueueEmpty(LinkQueue * plQueue);
int GetLinkQueueLength(LinkQueue * plQueue);
void EnLinkQueue(LinkQueue * plQueue, QElementType elem);
void DeLinkQueue(LinkQueue * plQueue, QElementType * elem);
//////////////////////////////////////////////////////
#define SEQUENCE_QUEUE_INIT_LENGTH 3
///循环队列CircularQueue
typedef struct {
QElementType * base;//用来保存入队数据
int front;
int rear;
}SqCirQueue;
void InitSqCircularQueue(SqCirQueue * pSqCirQueue);
int GetSqCircularQueueLength(SqCirQueue * pSqCirQueue);
int IsSqCircularQueueEmpty(SqCirQueue * pSqCirQueue);
void EnSqCircularQueue(SqCirQueue * pSqCirQueue, QElementType elem);
void DeSqCircularQueue(SqCirQueue * pSqCirQueue, QElementType * elem);
#endif // !_QUEUE_H_
#include <stdio.h>
#include <stdlib.h>
#include "Queue.h"
//static LinkQueue plQueue;
///返回只有头结点的队列
void InitLinkQueue(LinkQueue * plQueue) {
plQueue->front = plQueue->rear = (QueuePtr)malloc(sizeof(QNode));
plQueue->front->next = NULL;
plQueue->front->elem = 0;
}
///销毁队列
void DestoryLinkQueue(LinkQueue * plQueue) {
while (plQueue->front) {
plQueue->rear = plQueue->front->next;
free(plQueue->front);
plQueue->front = plQueue->rear;
}
plQueue->front = plQueue->rear = NULL;
}
///清空队列,即只保留头结点
void ClearLinkQueue(LinkQueue * plQueue) {
QueuePtr head = plQueue->front;
plQueue->front = plQueue->front->next;
while (plQueue->front != NULL) {
plQueue->rear = plQueue->front->next;
free(plQueue->front);
plQueue->front = plQueue->rear;
}
plQueue->front = plQueue->rear = head;
plQueue->front->next = NULL;
plQueue->front->elem = 0;
}
///队列的头始终指向链表的头结点
int IsLinkQueueEmpty(LinkQueue * plQueue) {
int iRet = -1;
if (plQueue->front == plQueue->rear) {
iRet = 0;
}
return iRet;
}
///队列头结点保存队列中元素的数目
int GetLinkQueueLength(LinkQueue * plQueue) {
return plQueue->front->elem;
}
/// 入队
void EnLinkQueue(LinkQueue * plQueue,QElementType elem) {
if (plQueue->front != NULL &&plQueue->rear != NULL) {
QueuePtr temp = (QueuePtr)malloc(sizeof(QNode));
temp->elem = elem;
temp->next = NULL;
plQueue->rear->next = temp;
plQueue->rear = plQueue->rear->next;
plQueue->front->elem++;
}
}
///出队
void DeLinkQueue(LinkQueue * plQueue, QElementType * elem) {
if (plQueue->front->elem > 0) {
QueuePtr temp = plQueue->front->next;
*elem = temp->elem;
plQueue->front->next = temp->next;
plQueue->front->elem--;
free(temp);
}
}
///初始化循环队列,0位置不存储元素,作为队列为空的标志
void InitSqCircularQueue(SqCirQueue * pSqCirQueue) {
pSqCirQueue->base = (QElementType *)malloc(SEQUENCE_QUEUE_INIT_LENGTH * sizeof(QElementType));
pSqCirQueue->front = 0;
pSqCirQueue->rear = 0;
}
///获取队列长度,实际模长为SEQUENCE_QUEUE_INIT_LENGTH-1其中有一个位置为标志位
///队列头指针在队列尾指针的下一位表示队列已满
int GetSqCircularQueueLength(SqCirQueue * pSqCirQueue) {
return (pSqCirQueue->rear - pSqCirQueue->front + SEQUENCE_QUEUE_INIT_LENGTH) % SEQUENCE_QUEUE_INIT_LENGTH;
}
///判断队列是否为空
int IsSqCircularQueueEmpty(SqCirQueue * pSqCirQueue) {
int iRet = -1;
if (pSqCirQueue->front == pSqCirQueue->rear) {
iRet = 0;
}
return iRet;
}
///入队
void EnSqCircularQueue(SqCirQueue * pSqCirQueue, QElementType elem) {
if ((pSqCirQueue->rear + 1) % SEQUENCE_QUEUE_INIT_LENGTH != pSqCirQueue->front) { //判断队列是否满
pSqCirQueue->base[pSqCirQueue->rear++] = elem;
pSqCirQueue->rear = pSqCirQueue->rear % SEQUENCE_QUEUE_INIT_LENGTH;
}
}
///出队
void DeSqCircularQueue(SqCirQueue * pSqCirQueue, QElementType * elem) {
if (pSqCirQueue->front != pSqCirQueue->rear) {//判断队列是否为空
*elem = pSqCirQueue->base[pSqCirQueue->front++];
pSqCirQueue->front %= SEQUENCE_QUEUE_INIT_LENGTH;
}
}
标签:表示 r++ real malloc def 保存 sizeof return int
原文地址:https://www.cnblogs.com/Black-Cobra/p/10825114.html