C语言链表又出问题了!!
#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<string.h>structdept{inti...
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct dept {
int id;
char *name;
int balance;
struct dept *next;
};
typedef struct dept dept_t;
dept_t *create_dept(int dept_id, char *dept_name, int dept_balance)
{
dept_t *create;
dept_t *n = malloc(sizeof(dept_t));
n->id = dept_id;
n->name = &dept_name;
n->balance = dept_balance;
n->next = NULL;
create=n;
}
void free_dept(dept_t *dept)
dept_t *cur=dept;
while(*cur != NULL)
{
dept_t *temp = cur->next;
free(cur);
cur = temp;
}
dept = NULL;
int main()
{
dept_t *p=*create_dept(51423, a, sum);//我省略了a,sum的建立
free_dept(p);
}
问题是在free那个函数里它总说dept undeclared可是我明明在main里建立了p啊,怎么说没declare
第二,在print函数里[Error] expected '=', ',', ';', 'asm' or '__attribute__' before 'dept_t',弄不懂啊啊啊 展开
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct dept {
int id;
char *name;
int balance;
struct dept *next;
};
typedef struct dept dept_t;
dept_t *create_dept(int dept_id, char *dept_name, int dept_balance)
{
dept_t *create;
dept_t *n = malloc(sizeof(dept_t));
n->id = dept_id;
n->name = &dept_name;
n->balance = dept_balance;
n->next = NULL;
create=n;
}
void free_dept(dept_t *dept)
dept_t *cur=dept;
while(*cur != NULL)
{
dept_t *temp = cur->next;
free(cur);
cur = temp;
}
dept = NULL;
int main()
{
dept_t *p=*create_dept(51423, a, sum);//我省略了a,sum的建立
free_dept(p);
}
问题是在free那个函数里它总说dept undeclared可是我明明在main里建立了p啊,怎么说没declare
第二,在print函数里[Error] expected '=', ',', ';', 'asm' or '__attribute__' before 'dept_t',弄不懂啊啊啊 展开
2个回答
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct dept {
int id;
char *name;
int balance;
struct dept *next;
};
typedef struct dept dept_t;
dept_t *create_dept(int dept_id, char *dept_name, int dept_balance)
{
dept_t *list_head,*newNode,*tailNode;
list_head =tailNode= (dept_t *)malloc(sizeof(dept_t));//创建空链表
tailNode->next=NULL;
newNode= (dept_t *)malloc(sizeof(dept_t));//创建第一个节点
newNode->id = dept_id;
newNode->name = dept_name;
newNode->balance = dept_balance;
newNode->next = NULL;
tailNode->next=newNode;
tailNode=newNode;
return list_head;//你在这里没返回
}
void free_dept(dept_t *dept)
{
dept_t * temp;
dept_t *cur=dept->next;
while(cur!= NULL)//这里是判断链表节点存不存在,是不管里面的值的,
{ //只能用地址,如果用*cur,它指向的是一个结构体数据,会报错.
temp=cur->next;
free(cur);
cur=temp;
}
dept->next = NULL;
}
int main()
{
int sum;
char *a;
dept_t *p;
scanf("%s %d",a,&sum);
p=create_dept(51423, a, sum);//这里多了*,指针变量存的是地址
free_dept(p);
}
//***修改成这样就OK了
追问
void free_dept(dept_t *dept)
{
dept_t * temp;
dept_t *cur=dept->next; //请问你这里为何是dept->next而不是 dept? dept里也有元素啊
第二,在create函数里为何要创建空链表,像我这样直接用链表也可以啊
追答
空表那里是建立表头,链表和数组最大的区别是,数组可以按下标随意查询,而链表要从表头查起,你这样倒也是可以,但是大多数写法是链表的表头只存放第一个节点的地址,不存数据的,这样做是为了万一你要删除的是第一个节点的数据,那把表头都删了,牵一发而动全身啊
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询