循环队列的简单程序:
#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 256
/***************************************
*定义队列结构
* **************************************/
typedef struct {
int data[MAXSIZE];/*数据类型,其中int可以根据需要进行修改*/
int front; /*队列头指针*/
int rear; /*队列尾指针*/
}SqQueue;
/********************************
*初始化队列
*入口参数:所需初始化队列指针
* *****************************/
int InitQueue(SqQueue *Q)
{
Q->front = 0;
Q->rear = 0;
return 0;
}
/**********************************
* 队列长度
* 入口参数:队列
* 出口参数:队列长度
******************************** */
int QueueLength(SqQueue Q)
{
return((Q.rear-Q.front+MAXSIZE)%MAXSIZE);
}
/*************************************
*入队列
*入口参数:队列,入队列的元素
****** ************************/
int EnQueue(SqQueue *Q,int e)
{
if((Q->rear+1)%MAXSIZE==Q->front)
return -1;
Q->data[Q->rear] = e; /*加入元素*/
Q->rear = (Q->rear + 1)%MAXSIZE; /*尾指针+1*/
return 0;
}
/***********************************
*出队列
*入口函数:队列 出队列的元素指针
* *******************************/
int DeQueue(SqQueue *Q,int *e)
{
if(Q->front == Q->rear) /*队列空。返回错误*/
return -1;
*e = Q->data[Q->front]; /*出队列*/
Q->front = (Q->front + 1)%MAXSIZE; /*队列头指针+1*/
return 0;
}
int main(void)
{
SqQueue *Q;
int a[5]={1,2,3,4,5};
Q = (SqQueue*)malloc(sizeof(SqQueue));
if(NULL == Q){
printf("malloc failed\n");
return -1;
}
int reval;
reval = InitQueue(Q);
if(reval < 0){
printf("error in InitQueue\n");
return -1;
}
reval= EnQueue(Q,a[2]);
if(reval <0){
printf("error in EnQueue");
return -1;
}
printf(" data entry :%d\n",Q->data[Q->rear-1]); //尾数据
int b;
reval = DeQueue(Q,&b);
if(reval<0){
printf("error in DeQueue\n");
return -1;
}
printf("exit queue :%d\n",b);
free(Q);
return 0;
}
栈的简单程序
#include <stdio.h>
#include <malloc.h>
typedef int SElemTYpe;/*元素类型,暂时定义成int*/
#define MAXSIZE 256
/**************************
*栈数据结构
***************************/
typedef struct{
SElemTYpe data[MAXSIZE];
int top;
}SqStack;
/*******************************
*入栈
*入口参数:栈指针,入栈元素
*******************************/
int Push(SqStack *S,SElemTYpe e)
{
if(S->top == MAXSIZE-1)
return -1;
S->top++;
S->data[S->top]=e;
return 0;
}
/*******************************
*出栈
*入口参数:栈指针,出栈元素指针
******************************/
int Pop(SqStack *S,SElemTYpe *e)
{
if(S->top == -1)
return -1;
*e=S->data[S->top];
S->top--;
return 0;
}
/************************
*初始化栈
*入口参数:栈指针
************************/
int InitStack(SqStack *S)
{
S->top = 0;
return 0;
}
int main(void)
{
SElemTYpe a[5]={1,2,3,4,5};
SqStack *S;
S = (SqStack *)malloc(sizeof(SqStack));
if(NULL == S){
printf("malloc error!\n");
return -1;
}
int reval;
InitStack(S);
reval = Push(S,a[4]);
if(reval<0){
printf("PUSH error!\n");
return -1;
}
printf("push data:%d\n",S->data[S->top]);
int b=1;
reval = Pop(S,&b);
if(reval<0){
printf("Pop error \n");
return -1;
}
printf("POP data:%d\n",b);
free(S);
return 0;
}