新手讲队列:编程实现队列的入队出队操作

首先定义队列:

typedef struct student{
	int data;
	struct student *next;
}node;

typedef struct linkqueue{
	node *first,*rear;
}queue;

 

定义插入操作:

queue *insert(queue *HQ,int x){
   node *s;
   s=(node *)malloc(sizeof(node));
   s->data=x;
   s->next=NULL;
   if(HQ->rear==NULL){
   	//HQ没有队尾,则为空
	//就让s成为他的队尾 和队头 
   	HQ->first=s;
   	HQ->rear=s;
   }else{
   	//先让队尾的下一个元素指向s
	//将 s变为现在的队尾 
   	HQ->rear->next=s;
   	HQ->rear=s;
   }
   return HQ;
}

 

定义删除操作:

queue *del (queue *HQ){
	int x;
	if(HQ->first==NULL){
		cout<<"队列为空,无元素移除"<<endl;
	}
	else{
		x=HQ->first->data;
		//判断是否只有一个元素
		if(HQ->first==HQ->rear){
			HQ->first=NULL;
			HQ->rear=NULL;
		}else{
			HQ->first=HQ->first->next;
		}
	}
	return HQ;
}

以上即为实现

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我们开始讨论实现循环队列出队入队操作。循环队列是一种线性数据结构,它可以像普通队列一样实现先进先出的操作。但是,循环队列具有特殊的性质:队列的头和尾可以连接起来形成一个环。 为了实现循环队列,我们需要定义一个固定大小的数组,以及队头和队尾。初始时队头和队尾都指向数组的第一个元素。入队操作会将元素添加到队列的末尾,并把队尾往后移动一个位置。如果队列已经满了,那么入队操作会失败。出队操作会将队头指向的元素删除,并把队头往后移动一个位置。如果队列为空,那么出队操作也会失败。 下面是使用 C 语言实现出队入队操作代码: ``` #define MAX_SIZE 100 int queue[MAX_SIZE]; int front = 0; int rear = 0; void enqueue(int value) { if ((rear + 1) % MAX_SIZE == front) { printf("Queue is full!\n"); return; } queue[rear] = value; rear = (rear + 1) % MAX_SIZE; } int dequeue() { if (front == rear) { printf("Queue is empty!\n"); return -1; } int value = queue[front]; front = (front + 1) % MAX_SIZE; return value; } ``` 请注意,上述代码中使用了取模运算符来实现队列的循环性质。enqueue 函数中,我们首先检查队列是否已满,如果满了就打印错误信息并返回。否则,我们将元素添加到队列的末尾,令队尾指针往后移动一个位置。dequeue 函数中,我们首先检查队列是否为空,如果为空就打印错误信息并返回 -1。否则,我们将队头指向的元素删除,并令队头指针往后移动一个位置。最后,我们返回删除的元素的值。 希望这个解答能够帮助你。如果你有任何进一步的问题或者建议,请随时回复我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值