在这个程序中,我想把元素放在列表而不是数组中。最后打印出列表。
例如。
西蒙22
suzie 24
...
但是,我真的不明白如何操作列表,以及如何构建堆并检索它。我做了一些关于如何做的研究。这就是我的想法。 一些错误出来了,我不知道如何解决。
error: 'ptr' undeclared (first use in this function)
arrays.c:37:5: note: each undeclared identifier is reported only once for each function it appears in
arrays.c: In function 'main':
arrays.c:62:9: error: expected identifier or '(' before '=' token
arrays.c:69:5: warning: passing argument 1 of 'insert' from incompatible pointer type
arrays.c:28:13: note: expected 'struct Record *' but argument is of type 'struct Record **'
#include <stdio.h>
#include <stdlib.h>
/* these arrays are just used to give the parameters to 'insert',
to create the 'people' array */
char *names[7]= {"Simon", "Suzie", "Alfred", "Chip", "John", "Tim",
"Harriet"};
int ages[7]= {22, 24, 106, 6, 18, 32, 24};
/* declare your struct for a person here */
/* */
typedef struct Record{
char *names;
int ages;
struct Record *next;
} Record;
char getname(Record *names){
return names;
}
int getage(Record *ages){
return ages;
}
static void insert (Record *p, char *s, int n) {
//p[(*)] = malloc(sizeof(person));
/*static int nextfreeplace = 0;*/
Record *headptr = NULL;
while(!reached_eof(p)){
/* allocate heap space for a record */
ptr =(Record*) malloc(sizeof(Record));
if(ptr == NULL){
abort();
printf("memory allocation fail");
exit(1);
}
else{
printf("memory allocation to person - %s - \n", s);
}
ptr->name = getname(p);
ptr->age = getage(p);
/* link new object into the list */
ptr->next = headptr;
headptr = ptr;
}
}
int main( int argc, char **argv) {
/* declare nextinsert */
int = 0;
/* declare the people array here */
Record *p, *headptr;
headptr = NULL;
//insert the members and age into the unusage array.
for ( int i=0 ; i < 7; i++) {
insert (p, names[i], ages[i]);
/* do not dereference the pointer */
}
/* print out a line before printing the names and ages */
printf("\n");
/* print the people array here*/
for (int i=0; i < 7; i++) {
printf("The name is: %s, the age is:%i\n", p[i]->names, p[i]->ages);
}
/* This is the third loop for call free to release the memory allocated by malloc */
/* the free()function deallocate the space pointed by ptr. */
for(int i=0; i<7;i++){
free(p[i]);
}
}
答案 0 :(得分:3)
首先
以下代码很奇怪
char getname(Record *names){
return names;
}
int getage(Record *ages){
return ages;
}
我认为没有真正需要上述功能。
甚至这些行
ptr->name=getname(p);
ptr->age=getage(p);
你可以用
重新发送它们ptr->name=s;
ptr->age=n;
以下函数包含许多错误和奇怪的代码:
static void insert (Record *p, char *s, int n) {
//p[(*)] = malloc(sizeof(person));
/*static int nextfreeplace = 0;*/
Record *headptr = NULL;
while(!reached_eof(p)){
/* allocate heap space for a record */
ptr =(Record*) malloc(sizeof(Record));
if(ptr == NULL){
abort();
printf("memory allocation fail");
exit(1);
}else{
printf("memory allocation to person - %s - \n", s);
}
为什么使用while循环。并且你错过了ptr指针的定义,你有记录在函数末尾传递neaw标题。在你如何解决它之后:
static void insert (Record **header, char *s, int n) {
Record *ptr;
ptr =(Record*) malloc(sizeof(Record));
if(ptr == NULL){
abort();
printf("memory allocation fail");
exit(1);
}else{
printf("memory allocation to person - %s - \n", s);
}
ptr->name=s;
ptr->age=n;
/* link new object into the list */
ptr->next=*header;
*headptr=ptr;
}
在您的主要功能中:
int main(int argc, char **argv) {
int i= 0;
Record *p, *headptr=NULL;
for (int i=0; i < 7; i++) {
insert (&headptr, names[i], ages[i]);
/* do not dereference the pointer */
}
for (int i=0; i < 7; i++) { /* this will print from array*/
printf("From array The name is: %s, the age is:%i\n", p[i]->names, p[i]->ages);
}
for (p=headptr; p!=NULL; p=p->next) { /* this will print from linked list*/
printf("From linked list The name is: %s, the age is:%i\n", p->names, p->ages);
}
}
答案 1 :(得分:0)
我猜唯一的错误是你在使用malloc函数之前错过了定义指针。将指针定义为
Record *ptr ;
代码中的某处有以下文字:
int = 0;
这是第二个错误。
您正在传递NULL指针p
以在for循环中插入函数
编辑这些,他们现在必须修复错误。