判单链表是否对称
来源:互联网 发布:传奇游戏源码是什么 编辑:程序博客网 时间:2024/05/21 14:50
原题:设单链表中存放着n个字符,设计算法并判断字符是否中心对称,如"xyzzyx"是中心对称的。
分析:可先将字符串中的全部字符进栈,然后再将栈中的字符逐个与链表中的字符进行比较,如全部相等,则为中心对称。
/*该程序由文件strfile.txt中的字符串读出的字符此生成单链表,后判断单链表的字符串是否中心对称(即判断文件中的字符串是否中心对称)*/#include<iostream>#include<fstream.h>#define ElemType chartypedef struct LNode{//链表结点结构的定义ElemType data;struct LNode *next;}LNode,*LinkList;typedef struct LSNode{char data;//栈结点的数据域struct LSNode *prior;//指向前驱的指针struct LSNode *next;//指向下一结点的指针}LSNode,*LStack;LStack base,top;//定义栈底与栈顶指针,全局变量//LSNode *base,*top;//和上行等价的另一种定义方式int InitLinkStack(LStack &LS){//栈初始化,完成初始化时栈中没有结点LS=(LStack)malloc(sizeof(LSNode));LS->data='*';LS->next=LS->prior=NULL;base=top=LS;//初始化栈底与栈顶return 1;}int Push(LStack &LS,ElemType ch)//入栈操作,即插入新结点作为新的栈顶{LStack p=new LSNode;//为要插入栈顶的数据生成结点p->data=ch;//给栈结点赋值p->prior=top;top->next=p;top=top->next;//将新结点链入栈顶,并使top指针指向新栈顶top->next=NULL;//别忘了将插入栈顶的新结点的next域置空return 1;}int Pop(LStack &LS,ElemType &e)//出栈操作,即删除栈顶{if(top == base){cout<<"当前链栈已空!"<<endl;return -1;}e=top->data;top=top->prior;//top指针向栈底前进一个位置free(top->next);//释放top的下一个元素,即释放当前栈顶以实现出栈操作top->next=NULL;return 1;}int CreateList(LinkList &head){//由文件中的字符串生成单链表//定义文件输入流,以输入方式打开磁盘文件strfile.txtifstream infile("strfile.txt",ios::in|ios::nocreate);if(!infile){cerr<<"文件打开失败!"<<endl;exit(1);}LinkList p=NULL,q=NULL;head=NULL;ElemType ch;while(infile.get(ch)){//逐个读入文件strfile.txt中的所有字符,并由每个字符生成链表结点p=new LNode;p->data=ch;if(NULL == head)head=p;elseq->next=p;q=p;//q永远指向尾结点}infile.close();//关闭输入文件流if(NULL != head){//尾结点的next域置空q->next=NULL;}return 1;}int DisplayList(LinkList head){//顺序遍历链表并输出所有结点的数据域值if(NULL == head){cout<<"当前链表为空!"<<endl;return -1;}LinkList p=head;while(NULL != p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}int IsSymmetry(LinkList head){LStack LS;InitLinkStack(LS);//初始化栈LinkList p=head;//p指向第一个字符所在的节点ElemType temp_ch;while(NULL != p){//将字符串中的全部字符进栈Push(LS,p->data);p=p->next;}p=head;while(NULL != p){Pop(LS,temp_ch);if(p->data != temp_ch){cout<<"该字符串不是中心对称的字符串!"<<endl<<endl;return -1;}elsep=p->next;}cout<<"该字符串是中心对称的字符串!"<<endl<<endl;return 1;}int main(){LinkList head;CreateList(head);//生成单链表cout<<"顺序遍历链表并输出所有结点的数据域值:"<<endl<<endl;DisplayList(head);//打印单链表在的所有数据IsSymmetry(head);return 1;}
- 判单链表是否对称
- 判断字符串是否对称
- 判断字符串是否对称
- 判断字符串是否对称
- 判断字符串是否对称
- 判断字符串是否对称
- 判断一棵树是否对称
- 判断字符串是否对称
- 二叉树是否对称
- 判断树是否对称
- 判断一个字符串是否对称
- 判断二叉树是否对称
- java验证字符串是否对称
- Ruby 判断字符串是否对称
- 判断二叉树是否对称
- 判断是否是对称数
- 判断二叉树是否对称
- 判断二叉树是否对称
- 【adb】解决ADB server didn't ACK
- According to TLD or attribute directive in tag file, attribute value does not accept any expressions
- 根据文件中的字符串生成单链表
- Android Activity回传数据
- Solr的入门开发应用
- 判单链表是否对称
- 【IT 八卦】
- 关于SHFileOperation引发的问题
- HDU/HDOJ 1312 Red and Black 非常简单的搜索题 BFS
- HDU 4565 -- So Easy! 数学 && 2013 ACM-ICPC 长沙赛区全国邀请赛 A题
- java中的File.separator
- 字符串大小比较
- 解决MySQL错误reading initial communication packet_MySQL的两种方法
- 关于职场方面的文章书籍,请看这里