学习笔记–11.23
刚接触数据结构,实现方法简单,文中注释均为我在写代码中遇到的问题和调试过程。且在回文串判断的时候开始选择用快慢指针进行(但是由于此处思路不是很清晰,每次都会少计算一个位置导致换了一种方法)-方法简单但是时间复杂度就比较高;
后续我会再学习一下快慢指针的方法。
//数据结构之回文串的判断
//存储方式,单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
char c;
struct node* next;
}Lnode,*Linklist;
//创建 (尾插法)
Linklist creat()
{
Linklist L,q;
Lnode* s;
L=(Linklist)malloc(sizeof(Lnode));
L->next=NULL;
q=L;
char e;
printf("请输入想要创建的元素(空格分隔,输入q则结束):");
while(1)
{
scanf("%c",&e);
if(e!='q')
{
s=(Linklist)malloc(sizeof(Lnode));
s->next=q->next;
q->next=s;
s->c=e;
q=s;
}
else
break;
}
return L;
}
int length(Linklist L)
{
int count=0;
while(L!=NULL)
{
L=L->next;
count++;
}
// printf("这个链表的长度为:%d",count-1);
return count-1;
}
Linklist huiwen(Linklist L)
{//使用快慢两个指针进行操作,快指针走两边,慢指针走一步 快指针走到终点,正好慢指针走到中点,然后逆序后半段链表。
int i,sum;
sum=length(L);//得到单链表的长度
Linklist s;//申明一个s结点
Linklist q;
int flag=1;
q=L;
s=L->next;//s指向L的位置
int a=sum;
int j;
for(j=1;j<=(a/2);j++)
{
for(i=0;i<sum;i++)
{
L=L->next;// 找到最后一个结点
}
if(s->c==L->c)
{
s=s->next;
sum--;
}
else{
flag=0;
}
L=q;
}
if(flag==1)
{
printf("\n该串是回文串\n");
}
else
{
printf("该串不是回文串\n");
}
return q;
// Linklist fast;
// Linklist slow;
// Linklist q;
// Linklist prev=NULL;
// Lnode* s;
// fast=L;
// slow=L;
// q=L;
// while(fast!=NULL&&fast->next!=NULL)
// {
// s=(Linklist)malloc(sizeof(Lnode));
// fast=fast->next->next;
// printf("1.fast=%c\n",fast->c);
// printf("1.slow=%c\n",slow->c);
// s=slow->next;//记录slow的下一个位置
// printf("2.s=%c\n",s->c);
// slow->next=prev;//插入到头
// printf("3.slow=%c\n",slow->c);
// prev=slow;// prev移动到头部
// printf("4.prev=%c\n",prev->c);
// slow=s;//slow回到正确位置
// printf("5.slow=%c\n",slow->c);
// }
// if(fast!=NULL)
// {
// slow=slow->next;
// }
// while(slow!=NULL)
// {
// if(slow->c!=prev->c)
// {
// printf("该串不是回文串\n");
// break;
// }
// slow=slow->next;
// printf("3.%c",slow->c);
// prev=prev->next;
// printf("3.%c",prev->c);
// }
// return q;
}
void print(Linklist L)
{
L=L->next;
printf("\n该字符串为:");
while(L!=NULL)
{
printf("%c",L->c);
L=L->next;
}
}
int main(){
Linklist L;
L=creat();
print(L);
huiwen(L);
print(L);
return 0;
}