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',弄不懂啊啊啊
展开
 我来答
Pzy583787301
推荐于2016-08-03 · 超过26用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:45万
展开全部
#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函数里为何要创建空链表,像我这样直接用链表也可以啊
追答
空表那里是建立表头,链表和数组最大的区别是,数组可以按下标随意查询,而链表要从表头查起,你这样倒也是可以,但是大多数写法是链表的表头只存放第一个节点的地址,不存数据的,这样做是为了万一你要删除的是第一个节点的数据,那把表头都删了,牵一发而动全身啊
a1012144015
2015-11-15 · TA获得超过6415个赞
知道大有可为答主
回答量:9038
采纳率:40%
帮助的人:1360万
展开全部
问题太多,复杂
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式