用和不用malloc创建顺序表,链表的区别

创建顺序表,还有链表的时候,用malloc和不用malloc的区别就是一个存放在堆上面,一个存放在栈上面。你之前自己写线性表代码的时候不是有疑问么,为什么要用malloc么,不用malloc不行么,就像创建一个数组,问了老师也可以,对吧。现在更清楚了

 

华清视频3.4.1的20分钟左右有讲。

 

C语言定义了4个内存空间

1,代码区

2,全局变量和静态变量区,全局变量,静态变量,字符串常量就放在这个区域

3,栈区

4,堆区,malloc

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!以下是使用C语言定义包含图书信息的顺序链表的示例代码: 1. 顺序 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 // 定义最大容量 typedef struct book { char name[30]; char author[20]; float price; } Book; typedef struct sqList { Book data[MAX_SIZE]; int length; } SqList; int main() { SqList L; L.length = 0; // 插入元素 Book book1 = {"The Catcher in the Rye", "J.D. Salinger", 25.5}; L.data[L.length++] = book1; Book book2 = {"To Kill a Mockingbird", "Harper Lee", 30.0}; L.data[L.length++] = book2; // 遍历输出 for (int i = 0; i < L.length; i++) { printf("书名:%s\n作者:%s\n价格:%.2f\n\n", L.data[i].name, L.data[i].author, L.data[i].price); } return 0; } ``` 2. 链表 ``` #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct book { char name[30]; char author[20]; float price; struct book *next; } Book; typedef struct linkedList { Book *head; int length; } LinkedList; int main() { LinkedList L; L.head = NULL; L.length = 0; // 插入元素 Book *book1 = (Book *)malloc(sizeof(Book)); strcpy(book1->name, "The Catcher in the Rye"); strcpy(book1->author, "J.D. Salinger"); book1->price = 25.5; book1->next = NULL; L.head = book1; L.length++; Book *book2 = (Book *)malloc(sizeof(Book)); strcpy(book2->name, "To Kill a Mockingbird"); strcpy(book2->author, "Harper Lee"); book2->price = 30.0; book2->next = NULL; book1->next = book2; L.length++; // 遍历输出 Book *p = L.head; while (p != NULL) { printf("书名:%s\n作者:%s\n价格:%.2f\n\n", p->name, p->author, p->price); p = p->next; } // 释放内存 p = L.head; while (p != NULL) { Book *q = p; p = p->next; free(q); } return 0; } ``` 希望这个例子能帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值