| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 976 人关注过本帖
标题:双向链表是否对称
只看楼主 加入收藏
gaobaoqiang
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-12
收藏
 问题点数:0 回复次数:6 
双向链表是否对称
双向链表是否对称
搜索更多相关主题的帖子: 链表 
2006-05-12 17:21
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
楼主,你有病啊,直接要程序,你给多少钱啊

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-12 17:22
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

逻辑位置可以前后对称


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-12 21:13
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
char data;
struct node *priorPtr;
struct node *nextPtr;
}*LinkList, Lnode;

static void CreateList(LinkList *headPtr, char ch);
static void Symmetry(LinkList headPtr); /* 判断双向链表是否对称函数 */

int main(void)
{
char ch;
LinkList headPtr = NULL;

printf("Enter a character('@' quit): ");
scanf("\n%c", &ch);
while (ch != '#')
{
CreateList(&headPtr, ch);
printf("continue enter character: ");
scanf("\n%c", &ch);
}

if (headPtr != NULL) /* 链表不空的情况下判断链表是否对称 */
{
Symmetry(headPtr);
}
else
{
printf("list is empty.\n");
}

return 0;
}

static void CreateList(LinkList *headPtr, char ch)
{
LinkList newPtr, previousPtr, currentPtr;

if ((newPtr = (LinkList)malloc(sizeof(Lnode))) == NULL)
{
exit(1);
}
newPtr -> data = ch;
newPtr -> priorPtr = NULL;
newPtr -> nextPtr = NULL;
previousPtr = NULL;
currentPtr = *headPtr;

if (*headPtr == NULL)
{
newPtr -> priorPtr = *headPtr;
newPtr -> nextPtr = *headPtr;
*headPtr = newPtr;
}
else
{
while (currentPtr != NULL)
{
previousPtr = currentPtr;
currentPtr = currentPtr -> nextPtr;
}
previousPtr -> nextPtr = newPtr;
newPtr -> priorPtr = previousPtr;
newPtr -> nextPtr = currentPtr;
}
}

static void Symmetry(LinkList headPtr)
{
LinkList frontPtr, rearPtr;
int count = 1;

frontPtr = headPtr;
rearPtr = headPtr; /* 初始化为头结点*/

while (rearPtr -> nextPtr != NULL) /* 是rearPtr指向最后一个结点 */
{
rearPtr = rearPtr -> nextPtr;
count++; /* 计算结点的总数 */
}
count /= 2;

while (count != 0)
{
if (frontPtr -> data == rearPtr -> data)
{
frontPtr = frontPtr -> nextPtr;
rearPtr = rearPtr -> priorPtr;
count--;
}
else
{
break;
}
}

if (count == 0)
{
printf("symmetry success.\n");
}
else
{
printf("symmetry failure.\n");
}
}



日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-12 22:57
gaobaoqiang
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-12
收藏
得分:0 

#include <stdio.h>
#include <stdlib.h>
typedef struct DuLNode
{char data;
struct DuLNode *prior,*next;
}DuLNode,*DuLinkList;
//建立双向循环链表
DuLinkList Create(void){
char ch;
DuLinkList head=(DuLinkList)malloc(sizeof(DuLNode));
DuLinkList s,r;
head->next=NULL;
head->prior=NULL;
r=head;
while((ch=getchar())!='\n'){
s=(DuLNode*)malloc(sizeof(DuLNode));
s->data=ch;
r->next=s;
s->prior=r;
r=s;
}
r->next=head;
head->prior=r;
return head;
}

//打印
void Print(DuLinkList head){
DuLinkList p;
for(p=head->next;p!=head;p=p->next)
printf("%c",p->data);
printf("\n");
}

//判断双向循环链表是否对称
int DuiChen(DuLinkList head){
DuLinkList p,q;
int i=1;
p=head->next;
q=p;
while(q->next!=head)
{
q=q->next;
i++;}
if(i<4&&p->data==q->data)
return 1;
if(i>=4){
while(q->next!=p){
if(q->data==p->data){p=p->next;
q=q->prior;}
else return 0;}
return 1;}
}


void main()
{int x;
DuLinkList head;
head=Create();
Print(head);
x=DuiChen(head);
printf("%d",x);
}

2006-06-08 16:17
gaobaoqiang
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-12
收藏
得分:0 

不好意思 我自己做出来了 还是要谢谢版主 已经运行通过

2006-06-08 16:19
撑篙寻梦
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-4-18
收藏
得分:0 
学习了。。。
2012-04-18 19:35
快速回复:双向链表是否对称
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020373 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved