#include<stdio.h>
#include<stdlib.h>
typedef struct Node {
int data;
struct Node* back;
struct Node* next;
}Node,*Linklist;
void push(int action,Linklist head1,Linklist head2,Linklist *rear1,Linklist *rear2) {
printf("请输入要压入的数据 : ");
int value;
scanf_s("%d",&value,sizeof(int));
getchar();
Linklist node = (Linklist)malloc(sizeof(Node));
if (node == NULL) {
printf("\n申请空间失败,压入失败!\n");
return;
}
node->data = value;
if (action == 1) {
node->back = NULL;
if (*rear1 == NULL) {
head2->back = node;
*rear2 = node;
}
else {
(*rear1)->back = node;
node->next = (*rear1);
}
*rear1 = node;
head1->next = *rear1;
}
else if (action == 2) {
node->next = NULL;
if (*rear2 == NULL) {
head1->next = node;
*rear1 = node;
}
else {
(*rear2)->next = node;
node->back = (*rear2);
}
*rear2 = node;
head2->back = *rear2;
}
}
void pop(int action, Linklist head1, Linklist head2,Linklist *rear1,Linklist *rear2) {
Linklist p = NULL;
if (action == 1) {
p = head1->next;
if (p == NULL) {
printf("\n队列为空!\n");
}
else {
head1->next = p->next;
*rear1 = p->next;
(*rear1)->back = NULL;
free(p);
}
}else if(action = 2) {
p = head2->back;
if (p == NULL) {
printf("\n队列为空!\n");
}
else {
head2->back = p->back;
*rear2 = p->back;
(*rear2)->next = NULL;
free(p);
}
}
}
void show(Linklist head1) {
Linklist p = head1->next;
printf("\n");
while ( p != NULL) {
printf("%d ", p->data);
p = p->next;
}
}
int main() {
Linklist head1 = (Linklist)malloc(sizeof(Node));
if (head1 == NULL) {
printf("开辟空间失败1!\n");
}
head1->next = NULL;
Linklist head2 = (Linklist)malloc(sizeof(Node));
if (head2 == NULL) {
printf("开辟空间失败2!\n");
}
head2->back = NULL;
Linklist rear1 = NULL, rear2 = NULL;
int i = 0,action = 0;
do {
printf("输入请按1,删除请按2,退出请按3 : ");
scanf_s("%d",&i,sizeof(int));
getchar();
if (i == 1) {
printf("左输入请按1,右输入请按2 : ");
scanf_s("%d", &action, sizeof(int));
push(action,head1,head2,&rear1,&rear2);
}
else if (i == 2) {
printf("左删除请输入1,右删除请输入2");
scanf_s("%d", &action, sizeof(int));
pop(action,head1,head2,&rear1,&rear2);
}
} while (i != 3);
show(head1);
return 0;
}