小编Ric*_*ral的帖子

我似乎无法删除C中二进制搜索树上最简单的情况

我去年发布了这个,因为一些大学项目,现在我必须再做一次(我从来没有完成我去年必须做的事情).我已经看过我以前的代码,你们所有人都回答了这些问题,但是,我似乎无法理解这一点.

我不打算把所有问题放在一篇长篇文章中,它只是让一切变得更加混乱,我需要一劳永逸地理解这一点.

我正在使用最简单的BST(只是元素的整数),我正在尝试从树中删除一个节点,它是最简单的演员,删除一个叶子.

我正在测试的树元素按以下顺序插入: 7 3 10 2 5 1 6 9 4 8

当然,顺序打印的输出是: 1 2 3 4 5 6 7 8 9 10

这是我的树结构:

typedef int TreeElement;

typedef struct sTree {
   TreeElement item;

   struct sTree *left;
   struct sTree *right;
} Tree;
Run Code Online (Sandbox Code Playgroud)

这是我的删除功能:

int delete(Tree **tree, TreeElement item) {
    if(!*tree) return 1;

    Tree *currPtr = *tree;
    Tree *prevPtr = NULL;

    while(currPtr) {
        if(item < currPtr->item) {
            prevPtr = currPtr;
            currPtr = currPtr->left;
        } else if(item > currPtr->item) {
            prevPtr …
Run Code Online (Sandbox Code Playgroud)

c binary-tree

0
推荐指数
1
解决办法
195
查看次数

如何使用大于一个char的分隔符拆分字符串?

假设我有这个:

"foo bar 1 and foo bar 2"
Run Code Online (Sandbox Code Playgroud)

我怎么能把它分成:

foo bar 1
foo bar 2
Run Code Online (Sandbox Code Playgroud)

我尝试过strtok(),strsep()但都没有奏效.他们不承认"和"作为分隔符,他们将"a","n"和"d"视为分隔符.

任何帮助我的功能,或者我必须通过空格分割并进行一些字符串操作?

c string string-split

0
推荐指数
2
解决办法
5989
查看次数

从文件中读取,atoi()仅在第一个元素上返回零

我不明白为什么atoi()每个条目都工作,但第一个条目.我有以下代码来解析一个简单的.csv文件:

void ioReadSampleDataUsers(SocialNetwork *social, char *file) {
    FILE *fp = fopen(file, "r");

    if(!fp) {
        perror("fopen");
        exit(EXIT_FAILURE);
    }

    char line[BUFSIZ], *word, *buffer, name[30], address[35];
    int ssn = 0, arg;

    while(fgets(line, BUFSIZ, fp)) {
        line[strlen(line) - 2] = '\0';

        buffer = line;
        arg = 1;

        do {
            word = strsep(&buffer, ";");

            if(word) {
                switch(arg) {
                    case 1:
                        printf("[%s] - (%d)\n", word, atoi(word));
                        ssn = atoi(word);
                        break;
                    case 2:
                        strcpy(name, word);
                        break;
                    case 3:
                        strcpy(address, word);
                        break;
                }

                arg++;
            }
        } …
Run Code Online (Sandbox Code Playgroud)

c csv file-io atoi

0
推荐指数
1
解决办法
706
查看次数

这个简单的代码应该会产生死锁,但事实并非如此

我昨天发布的问题类似,我有这个问题,我无法理解.代码非常简单,应该(我认为)会产生死锁.我甚至将帐号数量减少到2,以增加死锁的可能性.

代码非常容易理解,但是要提供一些上下文.我有一个账户银行,我在账户之间进行大量转账.传输方法应该生成死锁.为什么不发生这种情况?

我只能认为,代码运行太快,但似乎不太可能发生的所有的时间.

这是完整的代码:http: //pastebin.com/HWJpuT38

java concurrency synchronized

0
推荐指数
1
解决办法
157
查看次数

如何在C中使用系统调用创建一个Linux等效的"nl"命令?

我有一个练习要做我需要用C编码的代码,相当于catnl的命令只使用系统调用.给我们的系统调用是open(),close(),read()和write().

我已经完成了"猫"等效,它似乎运行正常,现在我需要做"nl"一个,但我遇到麻烦,我将如何逐行编写.

我们的想法是使用尽可能少的系统调用.

我知道我需要在缓冲区找到'\n',我可以做一段时间循环缓冲区并找到'\n'位置(让我们称之为X)然后将X个字节写入stdout.

但循环遍历缓冲区中的所有字符搜索行的末尾对我来说感觉不对,但我不知道我怎么能这样做...

重要编辑:
我想你们中有些人错过了我的问题......我不需要解释如何做到这一点,这不是我的问题.我知道该怎么做(或者有一个非常好的主意,我还没有尝试过)."问题"是,它感觉不对遍历缓冲区,文件也好,都烧焦成炭,找到行的末尾(无论怎样).我不是说这不是答案,或者我不允许这样做,我只是在谈论我的想法.这似乎是一种奇怪的方式,这就是全部......但如果就是这样,那就是我的问题的答案.

我很欣赏每个人的帮助:)

c linux system-calls

-2
推荐指数
1
解决办法
1210
查看次数

如何在 C# 中计算 UDP 传输速率 (kbps)?

首先,我知道 UDP 不是一个可靠的协议,但我需要在 UDP 中做到这一点,而且我知道最终可能会发生的后果。

让我们假设我有一个长byte数组,我将它分成 32 字节的块分成List<byte[]>. 这意味着发送的每个数据包的长度为 32 字节。

这些数据包将foreach循环发送,我不在乎它们是否到达目的地。这意味着我不期待主持人的确认(至少现在是这样)。

我的问题是,我将如何计算服务器在接收数据包时的当前传输速率(最好以 kbps 为单位)?

我对如何实现这样的计算感到有些困惑......

c# sockets udp rate transfer

-2
推荐指数
1
解决办法
4983
查看次数