关于链表、队列、栈

        学习的时候按照某一种方法去写,所以有些思维定势了;

        以链表的形式去写栈,实际上栈不一定就要遵循后入栈的在链表的后面,也可以设计一个表头不存储数据,然后表头后面的就是最后入栈的节点以及出栈的节点;同样地也可以使得后入栈的在最后面,这样每次出栈或者入栈就需要先对表头进行循环直至尾节点。

        同样地,对于队列的操作,不一定就非要使用链表的形式,也可以使用数组的形式,如下

//循环队列
#include "stdio.h"
#include "stdlib.h"

#define MaxSize 6
typedef struct Queue{
    int front;
    int rear;
    int data[MaxSize-1];//牺牲了一个空间
}Queue;

Queue* init();
int Queue_in(Queue* Q,int data);
int Queue_out(Queue* Q);
void Q_print(Queue* Q);

int main(){
    Queue* Q=init();
    Queue_in(Q,1);
    Queue_in(Q,2);
    Q_print(Q);
    Queue_in(Q,3);
    Queue_in(Q,4);
    Queue_in(Q,5);
    Queue_in(Q,6);
    Q_print(Q);
    Queue_out(Q);
    Q_print(Q);
    Queue_out(Q);
    Queue_out(Q);
    Queue_in(Q,10);
    Q_print(Q);

    return 0;
}

Queue* init(){
    Queue* Q=(Queue*) malloc(sizeof(Queue));
    Q->front=0;
    Q->rear=0;
    return Q;
}

int Queue_in(Queue* Q,int data){
    if(Q->front==(Q->rear+1)%MaxSize){
        printf("The queue is full!\n");
        return 0;
    }
    else{
        Q->data[Q->rear]=data;
        Q->rear=(Q->rear+1)%MaxSize;
        return 1;
    }
}

int Queue_out(Queue* Q){
    if(Q->front==Q->rear){
        printf("The queue is empty!\n");
        return -1;
    }
    else{
        int data=Q->data[Q->front];
        Q->front=(Q->front+1)%MaxSize;
        return data;
    }
}
void Q_print(Queue* Q){
    int length;
    length=(Q->rear+6-Q->front)%MaxSize;
    for(int i=Q->front;i<Q->front+length;i++){
        printf("%d <- ",Q->data[i]);
    }
    printf("NULL\n");
}

最后学习数据结构一定不要思维定势,只是一个工具怎么方便怎么来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值