使用单链表统计英文文本单词个数

#include "stdio.h" 
#include "malloc.h"
#include "string.h"
/**
*		因为扫描的过程需要往线性表中增加数据,所以使用单链表的形式,减少移动 
*		
*		注意下面三个*********************************************中的内容
* 		都是容易出错的地方! 
*/ 

//统计字符串中单词个数及每个单词出现次数
typedef struct WordsNode{
	int time;
	char s[20];//单词,最长长度为20 
	WordsNode *next; 
}WList; 

	
//将单词插入到带头节点的递增顺序排列的单链表中 
WList *function(char word[],WList *list){
	WordsNode *p=list->next,*pre=list;;
	while(p&&strcmp(p->s,word)<0){
		pre=p;
		p=p->next;
	}
	if(p==NULL || strcmp(p->s,word)){
		WordsNode *node=(WList *)malloc(sizeof (WordsNode));
		node->time=1;
		strcpy(node->s,word);//***********字符串不能直接赋值,需要拷贝或者手动遍历赋值!!!*************** 
		node->next=pre->next;
		pre->next=node;
	}else if(strcmp(p->s,word)==0){
		p->time=p->time+1;
	}
	return list; 
}

//扫面文章字符串,生成递增的单链表 
WList *create(char *text){
	WList *list=(WList *)malloc(sizeof (WordsNode));//头结点 
	list->next=0;
	int i=0,j=0;
	char c=text[i];
	char word[20];
	while(c!='\0'){
		if((c>='A'&&c<='Z') || c>='a'&&c<='z'){
			word[j]=c;
			j++;
		}else{
			if(j>0){
				word[j]='\0';//******************字符结束标志!!!************************
				list=function(word,list);
				j=0;
			}
		}
		i++;//***************************不要忘记递增!!!最好循环开始的时候就写好********************************* 
		c=text[i];	
	}
	return list;
}

void print(WList *list){
	WordsNode *p=list->next;
	while(p) {
		printf("%10s	:%10d次\n",p->s,p->time);
		p=p->next;
	}
}

int main(){
	char s[300]="If the public can be well educated to enhance their awareness over the benefits of promoting Chinese culture | preserving the living circumstance | promoting the phenomenon mentioned, it would be much better.";
	WList *list=create(s);
	print(list);
}


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过遍历单链表统计数据元素结点个数,并且同时也可以记录最大和最小值。具体方法如下: 1. 定义一个计数器变量 count,初始值为 0。 2. 定义两个变量 max 和 min,初始值分别为链表的第一个元素的数值。 3. 从链表的第一个节点开始,依次访问每个节点。 4. 对于每个节点,将计数器变量 count 的值加 1。 5. 如果该节点的数值大于当前的最大值 max,则将变量 max 的值更新为该节点的数值。 6. 如果该节点的数值小于当前的最小值 min,则将变量 min 的值更新为该节点的数值。 7. 遍历完整个链表后,输出计数器变量 count 的值,以及最大值和最小值。 代码示例: ```python class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next # 定义一个单链表 head = ListNode(1) head.next = ListNode(2) head.next.next = ListNode(3) head.next.next.next = ListNode(4) head.next.next.next.next = ListNode(5) # 统计链表中元素的个数,以及最大值和最小值 count = 0 max_val = head.val min_val = head.val node = head while node: count += 1 if node.val > max_val: max_val = node.val if node.val < min_val: min_val = node.val node = node.next # 输出结果 print("链表中元素的个数:", count) print("最大值:", max_val) print("最小值:", min_val) ``` 输出: ``` 链表中元素的个数: 5 最大值: 5 最小值: 1 ``` 当然,这只是一个简单的例子,实际上,统计单链表中元素的个数、最大值和最小值还有许多其他的方法和技巧,可以根据实际情况选择不同的算法和数据结构。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值