栈与队列的区别

栈与队列是程序中常用的两种线性数据结构,它们的核心区别在于数据操作顺序:栈按照“后进先出”进行修改,队列按照“先进先出”进行修改。

1.核心区别

特性栈 (Stack)队列 (Queue)
数据顺序后进先出 (LIFO)先进先出 (FIFO)
操作位置同一端(栈顶)插入在队尾,删除在队首
典型操作pushpoppeekenqueuedequeuepeek
应用场景函数调用、括号匹配、递归任务调度、BFS遍历、缓冲区

2.代码演示

2.1 栈的实现

以栈中元素为整型为例,实现栈基本运算函数定义如下

typedef struct nodo{
    int data;            //节点的数据域
    struct node *next;   //节点的指针域
}Node, *LinkList;
typedef struct{
    LinkList top;        //栈顶头指针
}Stack;

//创建一个单链表空栈
void initStack(Stack *s)
{
    s->top = NULL;
}
//元素入栈,若成功则返回1,否则返回0
int push(Stack *s,int n)
{
    Node *p = (Node *)malloc(sizeof(Node));
    if(!p) return 0;
    p->data = n;
    p->next = s->top;
    s->top = p;
    return 1;
}
//元素出栈,非空栈的栈顶元素出栈,成功则返回1,否则返回0
int pop(Stack *s)
{
    Node *p = s->top;
    if(!p) return 0;
    s->top = p->next;
    free(p);
    return 1;
}
//读取并返回栈顶元素,成功则返回1,否则返回0
int top(Stack *s ,int *n)
{
    if(!s.top) return 0;
    *n = s.top->data;
    return 1;
}
//判断栈是否空,是则返回1,否则返回0
int isEmpty(Stack s)
{
    return (s.top == NULL);
}

2.2 队列的实现

#define MAX_SIZE    100
typedef struct {
    int *base;           //队列存储空间首地址
    int front,rear;      //队头、队尾指针
}sqQueue;
//创建一个容量为MAX_SIZE的空队列,若成功则返回1,否则返回0
int initQueue(SqQueue *q)
{
    q->base = (int *)malloc(MAX_SIZE*sizeof(int));
    if(!q->base) return 0;
    q->front = 0;
    q->rear = 0;
    return 1;
}
//判断栈是否空,是则返回1,否则返回0
int isEmpty(SqQueue q)
{
    return (q->front == q->rear);
}
//元素入队列,成功则返回1,否则返回0
int enQueue(SqQueue *q,int n)
{
    if((q->rear+1) % MAX_SIZE == q->front) retuen 0;
    q->base[q->rear} = n;
    q->rear = (q->rear + 1] % MAX_SIZE;
    return 1;
}
//元素出队列,若队列不空,则删除头元素,n带回该值并返回1,否则返回0
int delQueue(SqQueue *q,int *n)
{
    if(q->raer == q->front) return 0;
    *n = q->base[q->front];
    q->front = (q->front + 1) % MAX_SIZE;
    return 1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值