您的位置:首页 > 理论基础 > 数据结构算法

两个简单的队列和栈的例子

2012-07-18 23:29 351 查看
循环队列的简单程序:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struct 数据结构 null