C中的节点和链表语法

时间:2016-01-03 13:49:55

标签: c database pointers linked-list structure

我想实现上述功能:

struct _book
{
    int id;
    char name[20];
    char Author[20];
    int quantity;
    float Price;
    int rack_no;
};

typedef struct _book book;

typedef struct _node
{
    book* data;
    struct _node* next;
} Node;

Node* book_list=NULL;

void createPassword(void);
int logIn(void);
void sellBook(void);
void addBook(void);
void changePassword(void);
void searchBook(void);
void printZeroQuantity(void);
void printBooks(void);
void logOut(void);
void updateQuantity(void);
void entry(void);
void deleteBook(void);
void updateQuantity(void);

嘿,我是一个新的“程序员”,仅仅两个月,我对C中的结构和链表有疑问。

我想构建一个管理库数据库的应用程序。

此外,我希望收到作为参数void获取的实现函数,并返回void,例如像这个函数:addBook(void),这意味着所有结构都是全局的该计划。

我的问题是我如何阅读链接列表的头部来自函数而不是将指针发送到link_structures的顶部,例如:book make_book(book *booklist,int count)

你认为建立将创造的半功能是可取的吗? Node* new_node(int data)或者没必要?

book *Addbook(book *book_list,int *counter)
{
    book Newbook;

    int size, num, size1, size2, flag, check, i, size3;

    char *tempfirst, *templast, *tempphone;

    int *temprackno, *tempid;

    double *tempprice;

    (*counter)++;

    book_list = (book*)realloc(book_list, (sizeof(book)*(*counter)));

    book_list[*counter-1] = Getbook(book_list, ((*counter-1)));

    printf("\nA book was added seccesfully");

    return(book_list);        
}

book Getbook(book *book_list, int count)
{
    book NewBook;
    int size, num, size1, size2, flag, check, i, size3, counte;

    char *tempfirst, *Author, *tempphone;

    int *temprackno = 0, *tempid = 0;

    double *tempprice;

    tempfirst = (char*)malloc(M*(sizeof(char)));

    Author = (char*)malloc(M*(sizeof(char)));

    tempphone = (char*)malloc(M*(sizeof(char)));

    while((tempfirst==NULL) ||(Author==NULL) || (!tempid) || (!tempprice) )
    {
        tempfirst = (char*)malloc(M*(sizeof(char)));
        Author = (char*)malloc(M*(sizeof(char)));
        tempid = (int*)malloc(M*(sizeof(int)));
        tempprice = (double*)malloc(M*(sizeof(double)));
    }

最后一个问题:这条线有什么问题?程序在运行时会下降,并且没有输入值到新节点。

scanf(“%d”,&(new_node-> data-> id));

{

Node* new_node = (Node*) malloc(sizeof(Node));
printf("\nPlease enter the book id:");
scanf("%d", &(new_node->data->id));
printf("\nPlease enter the book name:");
scanf("%s", &(new_node->data->Author));
printf("\nPlease enter the book quantity:");
scanf("%d", &(new_node->data->quantity));
printf("\nPlease enter the book rack:");
scanf("%d", &(new_node->data->rackno));
}

1 个答案:

答案 0 :(得分:0)

您可以将其保存在全局变量中,然后在函数中使用它。喜欢:

...

typedef struct _node
{
    book* data;
    struct _node* next;
}Node;

struct Node *head;
struct Node *tail;

//more declarations

int main(void)
{  
    //code
}

...

注意:使用小写字母命名变量。

首先初始化headtail,然后直接在您的函数中使用它们。

关于第二个问题,为什么不。但更好的选择是append(类似于你的new_node),然后是insert函数。

注意:您将“Node* new_node(int data)”放在上面会出错,因为类型不兼容,更好:Node* new_node(book **data)

希望它有所帮助。