diff --git a/舞伴问题 栈.cpp b/舞伴问题 栈.cpp new file mode 100644 index 0000000..415ab01 --- /dev/null +++ b/舞伴问题 栈.cpp @@ -0,0 +1,122 @@ +#include +#include + +typedef struct { + char name[20]; + char sex; +} DataType; + +struct Node { + DataType data; + struct Node* next; +}; +typedef struct Node *PNode; +struct Queue +{ + PNode f; + PNode r; +}; +typedef struct Queue *LinkQueue; +LinkQueue SetNullQueue_Link() +{ + LinkQueue lqueue; + lqueue = (LinkQueue)malloc(sizeof(struct Queue)); + if (lqueue != NULL) + { + lqueue->f = NULL; + lqueue->r = NULL; + } + else + printf("Alloc failure! \n"); + return lqueue; +} + +int IsNullQueue_link(LinkQueue lqueue) +{ + return (lqueue->f == NULL); +} + +void EnQueue_link(LinkQueue lqueue, DataType x) +{ + PNode p; + p = (PNode)malloc(sizeof(struct Node)); + if (p == NULL) + printf("Alloc failure!"); + else { + p->data = x; + p->next = NULL; + if (lqueue->f == NULL) + { + lqueue->f = p; + lqueue->r = p; + } + else + { + lqueue->r->next = p; + lqueue->r = p; + } + } +} +void DeQueue_link(LinkQueue lqueue) +{ + struct Node * p; + if (lqueue->f == NULL) + printf("It is empty queue!\n "); + else + { + p = lqueue->f; + lqueue->f = lqueue->f->next; + free(p); + } +} +DataType FrontQueue_link(LinkQueue lqueue) +{ + if (lqueue->f == NULL) + { + printf("It is empty queue!\n"); + } + else + return (lqueue->f->data); +} + +void DancePartner(DataType dancer[], int num) +{ + LinkQueue Queue_head = SetNullQueue_Link(); + + for (int i = 0; i < num; i++) + { + + if (!IsNullQueue_link(Queue_head) && + (FrontQueue_link(Queue_head).sex) != dancer[i].sex) + { + if (dancer[i].sex == 'F') + printf("%s %s\n", dancer[i].name, Queue_head->f->data.name); + else + { + printf("%s %s\n", Queue_head->f->data.name, dancer[i].name); + } + DeQueue_link(Queue_head); + } + else + { + EnQueue_link(Queue_head, dancer[i]); + } + } + printf("\n"); + + if (!IsNullQueue_link(Queue_head)) + { + printf("%s", Queue_head->f->data.name); + } +} + + + +int main() +{ + DataType dancer[9]; + for (int i = 0; i < 9; i++) + scanf("%s %c", dancer[i].name, &dancer[i].sex); + DancePartner(dancer, 9); + return 0; +}