Satck.h
#ifndef _SAQ_H
#define _SAQ_H_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#define NUMBER 20
typedef int DataType;
typedef struct Stack
{
DataType array[NUMBER];
DataType top;
}Stack;
void InitStack(Stack *p);
void PushStack(Stack *cur, DataType data);
void PopStack(Stack *cur);
DataType StackTop(Stack *cur);
int StackSize(Stack *cur);
int StackEmpty(Stack *cur);
#endif //_SAQ
Stack.c
#include"Stack.h"
//初始化栈
void InitStack(Stack *p)
{
assert(p);
p->top = 0;
}
//入栈
void PushStack(Stack *cur, DataType data)
{
assert(cur);
cur->array[cur->top] = data;
cur->top++;
}
//出栈
void PopStack(Stack *cur)
{
assert(cur);
cur->top--;
}
//栈顶的元素
DataType StackTop(Stack *cur)
{
assert(cur);
if(cur->top != 0)
return cur->array[cur->top-1];
}
//栈中的元素个数
int StackSize(Stack *cur)
{
assert(cur);
return cur->top;
}
//栈是否为空
int StackEmpty(Stack *cur)
{
assert(cur);
if(cur->top == 0)
return 1;
return 0;
}
主函数.c
#include"Stack.h"
void StackText()
{
Stack cur = {0};
DataType data = 0;
int size = 0;
InitStack(&cur);
PushStack(&cur, 1);
PushStack(&cur, 2);
PushStack(&cur, 3);
PopStack(&cur);
size = StackSize(&cur);
data = StackTop(&cur);
}
int main()
{
StackText();
return 0;
}
Queue.h
#ifndef _QUEUE_
#define _QUEUE_
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
typedef int DataType;
typedef struct Node
{
DataType data;
struct Node*next;
}Node;
typedef struct Queue
{
Node *Front;
Node *Back;
}Queue;
Node *BuyQueueNode(DataType d);
void QueueInit(Queue *q);
void QueuePush(Queue *q, DataType d);
void QueuePop(Queue*q);
DataType QueueTopNode(Queue *q);
DataType QueueLaterNode(Queue *q);
DataType QueueNum(Queue *q);
DataType QueueEmpty(Queue*q);
#endif //_QUEUE
Queue.c
#include"Queue.h"
//创建一个节点
Node *BuyQueueNode(DataType d)
{
Node* NewNode = (Node*)malloc(sizeof(Node));
if(NewNode == NULL)
{
printf("申请失败\n");
exit(0);
}
NewNode->data = d;
NewNode->next = NULL;
return NewNode;
}
//初始化队列
void QueueInit(Queue *q)
{
assert(q);
q->Back = NULL;
q->Front = NULL;
}
//入队列
void QueuePush(Queue *q, DataType d)
{
assert(q);
if(q->Front == NULL)
{
q->Front = BuyQueueNode(d);
q->Back = q->Front;
}
else
{
q->Back->next = BuyQueueNode(d);
q->Back = q->Back->next;
}
}
//出队列
void QueuePop(Queue*q)
{
assert(q);
if(q->Front != q->Back)
{
Node*ret = q->Front;
q->Front = q->Front->next;
free(ret);
ret = NULL;
}
else
{
Node*ret = q->Front;
free(ret);
ret = NULL;
q->Front = NULL;
q->Back = NULL;
}
}
//队头元素
DataType QueueTopNode(Queue *q)
{
return q->Front->data;
}
//队尾元素
DataType QueueLaterNode(Queue *q)
{
return q->Back->data;
}
//队内的个数
DataType QueueNum(Queue *q)
{
int count = 1;
Node*cur = q->Front;
while(cur != q->Back)
{
count++;
cur = cur->next;
}
return count;
}
DataType QueueEmpty(Queue*q)
{
if(q->Front == NULL || q->Back == NULL)
return 1;
return 0;
}
主函数.c
#include"Queue.h"
void Text()
{
DataType a = 0;
Queue cur = {0};
QueueInit(&cur);
QueuePush(&cur, 12);
QueuePush(&cur, 13);
QueuePush(&cur, 14);
QueuePush(&cur, 15);
QueuePop(&cur);
a = QueueTopNode(&cur);
a = QueueLaterNode(&cur);
a = QueueNum(&cur);
a = QueueEmpty(&cur);
}
int main()
{
Text();
return 0;
}