用C语言设计一个主函数调试带头结点的循环双链表是否对称?
时间: 2024-03-02 21:53:12 浏览: 30
以下是一个用C语言设计的主函数,用于测试带头结点的循环双链表是否对称:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct DLinkNode {
int data;
struct DLinkNode *prior;
struct DLinkNode *next;
} DLinkNode;
// 判断带头结点的循环双链表是否对称
bool Symm(DLinkNode *L) {
bool same = true;
DLinkNode *p = L->next;
DLinkNode *q = L->prior;
while (same) {
if (p->data != q->data) {
same = false;
} else {
if (p == q || p == q->prior) {
break;
}
q = q->prior;
p = p->next;
}
}
return same;
}
int main() {
// 创建一个带头结点的循环双链表
DLinkNode *L = (DLinkNode*)malloc(sizeof(DLinkNode));
L->next = L;
L->prior = L;
DLinkNode *p = L;
for (int i = 1; i <= 5; i++) {
DLinkNode *newNode = (DLinkNode*)malloc(sizeof(DLinkNode));
newNode->data = i;
newNode->prior = p;
newNode->next = L;
p->next = newNode;
L->prior = newNode;
p = newNode;
}
// 调用 Symm() 函数判断是否为对称链表
bool isSymm = Symm(L);
if (isSymm) {
printf("该链表是对称链表\n");
} else {
printf("该链表不是对称链表\n");
}
// 释放链表内存
p = L->next;
while (p != L) {
DLinkNode *temp = p;
p = p->next;
free(temp);
}
free(L);
return 0;
}
```
该主函数创建了一个包含五个节点的带头结点的循环双链表,然后调用`Symm()`函数判断该链表是否为对称链表,并输出结果。最后释放链表内存。你可以根据需要修改节点数和节点值来进行测试。