数据结构入门3----队列

数据结构入门3----队列

学完陷入后厨的Stack
先入先出,后入后出的队列了解一下?

这里也有顺序的数组算法和链式原理

NO.1顺序
这里需要想到环–》使得只有一个浪费的资源

typedef int ElementType;
typedef struct QNode * Queue;

struct QNode{
	ElementType Data[MaxSize];
	int rear;
	int front;
};

基本操作

void AddQ(Queue PtrQ, ElementType item){
	if((PtrQ->rear+1)%MaxSize == PtrQ->front){
		printf("Stack is full\n");
		return ;
	}
	PtrQ->rear = (PtrQ->rear+1)%MaxSize;
	PtrQ->Data[PtrQ->rear] = item;
} 

ElementType DeleteQ(Queue PtrQ){
	if(PtrQ->front == PtrQ->rear){
		printf("Stack is empty\n");
		return -1;
	}
	else{
		PtrQ->front = (PtrQ->front + 1)%MaxSize;
		return PtrQ->Data[PtrQ->front];
	}
}

NO.2 链式连接

typedef int ElementType;
typedef struct QNode * Queue;

struct Node{
	ElementType d;
	struct Node * Next;
}; 

struct QNode{
	struct Node * rear;//队尾(插入) 
	struct Node * front;//队头(删除) 
};

注意: 链表头必须做删除,因为链表尾没办法做删除,只能插入
是否为空:

bool IsEmpty(Queue PtrQ){
	return (PtrQ->front == NULL);
}

入队,出队

//出队
ElementType DeleteQ(Queue PtrQ){
	struct Node *FrontCell;
	ElementType FrontNum;
	if(PtrQ->front == NULL){		//空 
		printf("empty\n");
		return -1;
	}
	else{
		FrontCell = PtrQ->front;
		FrontNum = FrontCell->d;
		if(PtrQ->front == PtrQ->rear){		//只有一个元素 
			PtrQ->front = PtrQ->rear = NULL;
		}
		else{
			PtrQ->front = FrontCell->Next;
		}
		free(FrontCell);
		return FrontNum;
	}
} 

//入队
void InQueue(Queue PtrQ,ElementType item){
	struct Node *Tmp;
	Tmp->d = item;
	struct Node *Last;
	Last = PtrQ->rear;
	if(PtrQ->front == NULL){		//空 
		PtrQ->front = Tmp;
		PtrQ->rear = Tmp;
		return ;
	}
	else{
		Last->Next = Tmp;
		PtrQ->rear = Tmp;
		return ;
	}
} 

这里就已经学完最基本的线性结构知识啦~
要多做题才能掌握哦!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值