首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CS50_week5 Data Structures

CS50_week5 Data Structures

原创
作者头像
greatak
修改2024-10-01 14:04:36
修改2024-10-01 14:04:36
1460
举报
文章被收录于专栏:cs50cs50

地址值为0--表示为NULL。

Linked List

0x0是0地址,即为NULL
0x0是0地址,即为NULL
代码语言:c
复制
typedef struct
{
    string name;
    int votes;
} candidate;

代码语言:c
复制
typedef struct node
{
    int number;
    struct node *next;
} node;

node *list = NULL;
node *n = malloc(sizeof(node));
n->number = 1;
n->next = NULL;
list = n;

代码语言:c
复制
#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int number;
    struct node *next;

} node;

int main(int argc, char *argv[])
{
    node *list = NULL;

    for (int i = 1; i < argc; i++)
    {
        int number = atoi(argv[i]);
        node *n = malloc(sizeof(node));
        if (n == NULL)
        {
            //free memory thus far
            return 1;
        }
        n->number = number;
        n->next = list;
        list = n;
    }
    //print whole list
    node *ptr = list;
    while (ptr != NULL)
    {
        printf("%i\n", ptr->number);
        ptr = ptr->next;
    }
}
代码语言:c
复制
// Implements a list of numbers using a linked list
 
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node
{
    int number;
    struct node *next;
}
node;
 
int main(int argc, char *argv[])
{
    // Memory for numbers
    node *list = NULL;
 
    // For each command-line argument
    for (int i = 1; i < argc; i++)
    {
        // Convert argument to int
        int number = atoi(argv[i]);
 
        // Allocate node for number
        node *n = malloc(sizeof(node));
        if (n == NULL)
        {
            return 1;
        }
        n->number = number;
        n->next = NULL;
 
        // If list is empty
        if (list == NULL)
        {
            // This node is the whole list
            list = n;
        }
 
        // If list has numbers already
        else
        {
            // Iterate over nodes in list
            for (node *ptr = list; ptr != NULL; ptr = ptr->next)
            {
                // If at end of list
                if (ptr->next == NULL)
                {
                    // Append node
                    ptr->next = n;
                    break;
                }
            }
        }
    }
 
    // Print numbers
    for (node *ptr = list; ptr != NULL; ptr = ptr->next)
    {
        printf("%i\n", ptr->number);
    }
 
    // Free memory
    node *ptr = list;
    while (ptr != NULL)
    {
        node *next = ptr->next;
        free(ptr);
        ptr = next;
    }
}   

代码语言:c
复制
        
// Implements a sorted list of numbers using a linked list
 
#include <cs50.h>
#include <stdio.h>
#include <stdlib.h>
 
typedef struct node
{
    int number;
    struct node *next;
}
node;
 
int main(int argc, char *argv[])
{
    // Memory for numbers
    node *list = NULL;
 
    // For each command-line argument
    for (int i = 1; i < argc; i++)
    {
        // Convert argument to int
        int number = atoi(argv[i]);
 
        // Allocate node for number
        node *n = malloc(sizeof(node));
        if (n == NULL)
        {
            return 1;
        }
        n->number = number;
        n->next = NULL;
 
        // If list is empty
        if (list == NULL)
        {
            list = n;
        }
 
        // If number belongs at beginning of list
        else if (n->number < list->number)
        {
            n->next = list;
            list = n; 
        }
 
        // If number belongs later in list
        else
        {
            // Iterate over nodes in list
            for (node *ptr = list; ptr != NULL; ptr = ptr->next)
            {
                // If at end of list
                if (ptr->next == NULL)
                {
                    // Append node
                    ptr->next = n;
                    break;
                }
 
                // If in middle of list
                if (n->number < ptr->next->number)
                {
                    n->next = ptr->next;
                    ptr->next = n;
                    break;
                }
            }
        }
    }
 
    // Print numbers
    for (node *ptr = list; ptr != NULL; ptr = ptr->next)
    {
        printf("%i\n", ptr->number);
    }
 
    // Free memory
    node *ptr = list;
    while (ptr != NULL)
    {
        node *next = ptr->next;
        free(ptr);
        ptr = next;
    }
}

trees

Binary Search Tree

代码语言:c
复制
typedef struct node
{
    int number;
    struct node *next;
} node;
代码语言:c
复制
typedef struct node
{
    int number;
    struct node *left;
    struct node *right;
} node;
代码语言:c
复制
bool search(node *tree, int number)
{
    if (tree == NULL)
    {
        return false;
    }
    else if (number < tree->number)
    {
        return search(tree->left, number);
    }
    else if (number > tree->number)
    {
        return search(tree->right, number);
    }
    else if (number == tree->number)
    {
        return true;
    }
}

hash tables

代码语言:c
复制
typedef struct node
{
    char *name;
    char *number;
    struct node *next;
} node;

node *table[26];

代码语言:c
复制
#include <ctype.h>

int hash(char *word)
{
    return toupper(word[0]) - 'A';
}

tries

Problem set

1. Inheritance

tree

Thecreate_familyreturning a pointer to thepersonin the youngest generation

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linked List
  • trees
  • Binary Search Tree
  • hash tables
  • tries
  • Problem set
    • 1. Inheritance
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档