2020-07-19(C语言)数据结构-设计一个算法用于判断带头结点的循环双链表是否对称

//设计一个算法用于判断带头结点的循环双链表是否对称

include <stdio.h>

include <stdlib.h>

typedef struct DNode
{
int data;
struct DNode *prior, *next;
} DNode, *DLinkList;
DLinkList DList_TailInsert(DLinkList L, int n)
{
int i; //设元素类型为整型
L = (DLinkList)malloc(sizeof(DNode));
L->prior = L->next = L;
DNode *p, *q = L;
printf("请输入表元素:");
for (i = 0; i < n; i++)
{
p = (DNode *)malloc(sizeof(DNode));
scanf("%d", &p->data);
p->next = q->next;
q->next = p;
p->prior = q;
L->prior = p;
q = p;
}
return L;
}
void print(DLinkList L)
{
DLinkList p;
p = L->next;
while (p != L)
{
printf("%d ", p->data);
p = p->next;
}
}
int Symmetry(DLinkList L)
{
DNode *p = L->next, *q = L->prior; //两头工作指针
while (p != q && q->next != p) //循环跳出条件
{
if (p->data == q->data) //所指结点值相同则继续比较
{
p = p->next;
q = q->prior;
}
else
{
return 0;
}
}
return 1;
}
int main()
{
DLinkList L, A;
int n;
A = (DLinkList)malloc(sizeof(DNode));
printf("请输入要建立的链表长度:");
scanf("%d", &n);
A = DList_TailInsert(L, n);
printf("尾插法建立的双向循环链表:");
print(A);
printf("\n");
if (Symmetry(A) == 1)
printf("该循环双链表对称");
else
printf("该循环双链表不对称");
printf("\n");
return 0;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容