金牌会员
- 积分
- 2095
- 金钱
- 2095
- 注册时间
- 2014-3-7
- 在线时间
- 490 小时
|
发表于 2018-9-20 08:49:24
|
显示全部楼层
本帖最后由 ssssssssssss 于 2018-9-20 08:51 编辑
[/mw_shl_code][mw_shl_code=c,true]创建链表
typedef struct student{
int score;
struct student *next;
} LinkList;
初始化一个链表,n为链表节点个数。
LinkList *creat(int n){
LinkList *head, *node, *end;//定义头节点,普通节点,尾部节点;
head = malloc(sizeof(LinkList));//分配地址
end = head; //若是空链表则头尾节点一样
for (int i = 0; i < n; i++) {
node = malloc(sizeof(LinkList));
scanf("%d", &node->score);
end->next = node;
end = node;
}
end->next = NULL;//结束创建
return head;
}[/mw_shl_code]
[mw_shl_code=c,true]修改链表节点值
修改链表节点值很简单。下面是一个传入链表和要修改的节点,来修改值的函数。
1. void change(LinkList *list,int n) {//n为第n个节点
2. LinkList *t = list;
3. int i = 0;
4. while (i < n && t != NULL) {
5. t = t->next;
6. i++;
7. }
8. if (t != NULL) {
9. puts("输入要修改的值");
10. scanf("%d", &t->score);
11. }
12. else {
13. puts("节点不存在");
14. }
15. }
删除链表节点
删除链表的元素也就是把前节点的指针域越过要删除的节点指向下下个节点。即:p->next = q->next;然后放出q节点的空间,即free(q);
1. void delet(LinkList *list, int n) {
2. LinkList *t = list, *in;
3. int i = 0;
4. while (i < n && t != NULL) {
5. in = t;
6. t = t->next;
7. i++;
8. }
9. if (t != NULL) {
10. in->next = t->next;
11. free(t);
12. }
13. else {
14. puts("节点不存在");
15. }
16. }
插入链表节点
我们可以看出来,插入节点就是用插入前节点的指针域链接上插入节点的数据域,再把插入节点的指针域链接上插入后节点的数据域。根据图,插入节点也就是:head->next = e->next; head->next = e;
增加链表节点用到了两个结构体指针和一个int数据。
1. void insert(LinkList *list, int n) {
2. LinkList *t = list, *in;
3. int i = 0;
4. while (i < n && t != NULL) {
5. t = t->next;
6. i++;
7. }
8. if (t != NULL) {
9. in = malloc(sizeof(LinkList));
10. puts("输入要插入的值");
11. scanf("%d", &in->score);
12. in->next = t->next;//填充in节点的指针域,也就是说把in的指针域指向t的下一个节点
13. t->next = in;//填充t节点的指针域,把t的指针域重新指向in
14. }
15. else {
16. puts("节点不存在");
17. }
18. }
输出链表
输出链表很简单,边遍历边输出就行了。
1. while (h->next != NULL) {
2. h = h->next;
3. printf("%d ", h->score);
4. }[/mw_shl_code] |
|