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


循环队列的简单程序:

#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;
}






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值