计算链接列表中元音和辅音的数量

data structurec++server side programming

在这个问题中,我们需要计算给定链接列表中元音和常量的总数。我们可以遍历链接列表并检查每个字符,无论是常量还是元音。

问题陈述− 我们给出了一个包含小写字母字符的链接列表。我们需要计算链接列表中元音和常量的总数。

示例

输入

'a' -> 'b' -> 'e', 'c' -> 'd' -> 'e' -> 'f'' -> 'o' -> 'i' -> 'a' -> 'a'

输出

元音 – 7,常数 - 4

解释 − 包含'b'、'c'、'd'和'f'常数,其他为元音。

输入

a' -> 'e' -> 'i' -> 'o' -> 'u'

输出

元音 – 5,常数 - 0

解释 − 它包含输入字符串中的所有元音。

输入

'c' -> 'g' -> 'h' -> 'f'' -> 'p' -> 'q' -> 'w' -> 'x'

输出

元音 – 0,常量 - 7

说明 − 输入字符串仅包含常量。

方法 1

在此方法中,我们将获取数组中的字符。之后,我们将数组转换为链接列表。接下来,我们遍历链接列表并检查每个字符,无论是元音还是常量。

算法

步骤 1 − 定义'struct'类型的'listNode'以创建链接列表节点。

步骤 2 − 定义 addNode() 函数以将节点插入链接列表。

步骤 2.1 − 在 addNode() 函数中创建一个新节点。此外,使用给定的字符初始化其'ch'值,并使用空值初始化下一个节点。

步骤 2.2 − 如果起始节点为空,则将临时节点分配给起始节点。如果起始节点不为空,则遍历链接列表,找到最后一个节点,最后附加临时节点。

步骤 3 - 定义 isConst() 变量以检查特定字符是常量还是元音。

步骤 4 - 定义 countVowelsAndConst() 函数来计算给定字符串中元音和常量的总数。

步骤 5 - 用零初始化"cons"和"vow"变量,分别存储常量和元音的计数。

步骤 6 - 如果起始节点为空,则打印一条消息,表示列表不包含任何元音或辅音。

步骤 7 - 遍历链接列表,直到到达最后一个节点。获取当前节点的字符,并通过传递该字符作为参数来执行 isConst() 函数。

步骤 8 − 如果 isConst() 函数返回 true,则将"cons"变量的值增加 1。否则,将"vow"的值增加 1。

步骤 9 − 移动到循环中的下一个节点。

步骤 10 − 最后,打印"vow"和"cons"变量的值。

示例

#include <bits/stdc++.h>
using namespace std;

// 创建 struct listNode
struct listNode {
    int ch;
    listNode *next;
} listNode;
// 将节点添加到链接列表
void addNode(struct listNode **start, int ch) {
    // 创建新节点
    struct listNode *temp = new struct listNode();
    // 将 ch 添加到节点
    temp->ch = ch;
    temp->next = NULL;
    
    // 如果列表为空,则将节点添加到列表
    if (*start == NULL) {
        *start = temp;
    } else {
        // 如果列表有一些节点,则将该节点附加到列表的末尾
        struct listNode *pointer1 = *start;
        while (pointer1->next != NULL) {
            pointer1 = pointer1->next;
        }
        pointer1->next = temp;
    }
}
bool isConst(char ch) {
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
        return false;
    }
    return true;
}
// 计数元音和辅音
void countVowelsAndConst(struct listNode *start) {
    int vow = 0;
    int cons = 0;
    // 如果列表为空
    if (start == NULL) {
        cout << "列表不包含任何元音和常量" << endl;
        return;
    }
    // 遍历链接列表
    while (start != NULL) {
        if (isConst(start->ch)) {
            cons++;
        } else {
            vow++;
        }
        start = start->next;
    }
    cout << "列表中元音的总数为 " << vow << endl;
    cout << "列表中辅音的总数为 " << cons << endl;
}
int main() {
    int arr[] = {'a', 'b', 'e', 'c', 'd', 'e', 'f', 'o', 'i', 'a', 'a'};
    int len, p;
    // 创建一个空的链接列表
    struct listNode *start = NULL;
    len = sizeof(arr) / sizeof(arr[0]);
    // 将数组的字符插入到链接列表中
    for (p = 0; p < len; p++)
    addNode(&start, arr[p]);
    countVowelsAndConst(start);
    return 0;
}

输出

列表中元音的总数为 7
列表中辅音的总数为 4

时间复杂度− O(N),因为我们遍历链接列表。

空间复杂度− O(1),因为计数操作不占用任何空间。

我们计算了给定链接列表中元音和常量的总数。程序员还可以计算给定链接列表中特定字符的频率以进行更多练习。


相关文章