📄 order.cpp
字号:
/*输入一串字符,以“?”结束。统计各字母出现的次数,并按字母出现的多少输出
(先输出次数多的,次数相同的按字母表顺序输出,不出现的字母不输出)*/
/*思路:
运用带头节点的单链表,每次插入并排序*/
//beta 1版本(原始文件)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Node
{
int count;
char alph;
struct Node* next;
};
void getalph(char a[]);//输入字符串函数
void output(Node*);//输出函数
void main()
{
char a[100];
int i,flag;
getalph(a); //输入字符串存在数组中
if(a[0]=='\0')
{
printf("你输入的字符串为空:\n");
system("pause");
exit(1);
}
Node *h,*p,*temp,*q,*r,*b,*head;
head=(Node*)malloc(sizeof(Node));
h=(Node*)malloc(sizeof(Node));
h->alph=a[0];
h->count=1;
h->next=NULL;
head->next=h;
for(i=1;i<strlen(a);i++)
{
flag=0;
temp=(Node*)malloc(sizeof(Node));
temp->alph=a[i];
temp->count=1;
r=head;
p=r->next;
while(p!=NULL)
{
if(temp->alph!=p->alph)
{
r=p;
p=p->next;
}
else
{
p->count++;
flag=1;
break;
}
}
if(flag==0)//插在链表的尾端
{
r->next=temp;
temp->next=NULL;
b=head;
q=b->next;
while(q!=temp)
{
if(temp->count>q->count)
{
r->next=temp->next;//交换节点,下同
temp->next=q;//在插入节点之前,链表是排好序的,故交换一次即可
b->next=temp;
break;//不能漏掉,交换后指针未随节点交换
}
else if(temp->count<q->count)
{
b=q;
q=q->next;
}
else
{
if(temp->alph<q->alph)
{
r->next=temp->next;
temp->next=q;
b->next=temp;
break;
}
else if(temp->alph>q->alph)
{ b=q;
q=q->next;
}
}
}
}
if(flag==1)//插在链表的中间
{
b=head;
q=b->next;
while(q!=p)
{
if(p->count>q->count)
{
r->next=p->next;
p->next=q;
b->next=p;
break;
}
else if(p->count<q->count)
{
b=q;
q=q->next;
}
else
{
if(p->alph<q->alph)
{
r->next=p->next;
p->next=q;
b->next=p;
break;
}
else if(p->alph>q->alph)
{ b=q;
q=q->next;
}
}
}
}
}
output(head);
}
void getalph(char a[])
{
int i,j;
printf("输入一串字符,以“?”结束(若无问号则以回车结束)。统计各字母出现的次数,并按字母出现的多少输出(先输出次数多的,次数相同的按字母表顺序输出,不出现的字母不输出)\n");
printf("enter a string:\n");
gets(a);
for(i=0,j=0;(a[i]!='\0')&&(a[i]!='?');i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))//滤除a到z外其他字符
{
a[j]=a[i];
j++;
}
else
continue;
}
a[j]='\0';
}
void output(Node* head)
{
Node *h;
h=head->next;
do
{
printf("%-5c%5d\n",h->alph,h->count);
h=h->next;
}while(h!=NULL);
system("pause");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -