提问人:BrownyChewy 提问时间:11/10/2023 最后编辑:BrownyChewy 更新时间:11/10/2023 访问量:65
排队和取消排队功能
Enqueue and Dequeue Functions
问:
由于上下文很短,我需要将队列中的元素取消排队,并将它们排入临时队列。当原始队列为空且元素位于临时队列内时,我需要将它们排回原始队列。我的排队函数工作正常,但我认为我的 dequeue 函数缺少一些参数,我想不出它。在执行调用 dequeue 的不同函数后,程序将始终在函数完成执行后终止。
这是一段解决相同问题的代码。
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <conio.h>
typedef struct person{
char firstname[30], lastname[30], sex[10];
int hfeet, hinches;
float weight;
}Person;
typedef struct node *nodeptr;
typedef struct node{
Person data;
nodeptr next;
}Node;
//Function Declarations
void Add(nodeptr *queue, nodeptr *tail);
void Enqueue(nodeptr *queue, nodeptr *element, nodeptr *tail);
nodeptr Dequeue(nodeptr *queue, nodeptr *head);
void DisplayAll(nodeptr *queue, nodeptr *head, nodeptr *tail);
int main(void) {
nodeptr queue1 = NULL;
nodeptr h = NULL;
nodeptr t = NULL;
int ch;
while(1){
printf("Enter choice: ");
scanf("%d", &ch);
switch (ch) {
case 1:
Add(&queue1, &t);
break;
case 2:
DisplayAll(&queue1, &h, &t);
break;
}
}
return 0;
}
void Enqueue(nodeptr *queue, nodeptr *element, nodeptr *tail) {
if (*tail == NULL) {
*queue = *element;
*tail = *element;
}
else {
(*tail)->next = *element;
*tail = *element;
}
}
nodeptr Dequeue(nodeptr *queue, nodeptr *head) {
nodeptr current = *queue;
*queue = (*queue)->next;
*head = *queue;
return current;
}
void Add(nodeptr *queue, nodeptr *tail){
nodeptr queue1 = *queue;
nodeptr t = *tail;
bool chk = *chked;
char first[30], last[30];
int inch, feet;
float mass;
nodeptr element = (nodeptr)malloc(sizeof(Node));
printf("\nEnter First Name: ");
fflush(stdin);
gets(first);
strcpy(element->data.firstname, first);
printf("Enter Last Name: ");
fflush(stdin);
gets(last);
strcpy(element->data.lastname, last);
Enqueue(&queue1, &element, &t);
printf("\nData successfully added.");
getch();
system("cls");
*queue = queue1;
*tail = t;
*chked = chk;
}
void DisplayAll (nodeptr *queue, nodeptr *head, nodeptr *tail){
nodeptr queue1 = *queue;
nodeptr h = *head;
nodeptr t = *tail;
nodeptr tempqueue = NULL;
nodeptr h2 = NULL;
nodeptr t2 = NULL;
while (queue1 != NULL){
nodeptr current = Dequeue(&queue1, &h);
printf("\nFirst Name\tLast Name");
printf("\n%s\t%s", current->data.firstname, current->data.lastname);
getch();
Enqueue(&tempqueue, ¤t, &t2);
}
while (tempqueue != NULL){
nodeptr current = Dequeue(&tempqueue, &h2);
Enqueue(&queue1, ¤t, &t);
}
*queue = queue1;
*head = h;
*tail = t;
getch();
system("cls");
}
显示队列中的元素后,程序将退出。
答: 暂无答案
上一个:Laravel工作和望远镜套餐
评论
stdin
fflush
gets
In function 'Add': error: 'chked' undeclared
DisplayAll
head
tail
*queue
*head
*tail