您的位置:首页 > 编程语言 > C语言/C++

单向链表之创建添加(C语言实现)

2018-03-19 16:32 344 查看
创建方式:

顺序创建(新加入的放在尾部)、逆序创建(新加入的放在头部)

1、顺序创建:
两种情况:

当链表为空时,将链表头直接指向新加入的节点及第一个节点;
当链表不为空时,首先遍历链表找到链表尾节点,然后将新加入的点挂在尾部。



2、逆序创建: 
两种情况:

当链表为空时,将链表头直接指向新加入的节点及第一个节点;

当链表不为空时,首先将之前的第一个链表节点挂接到新插入的节点上 ,然后将链表头指向新插入的节点。



demo:

#include <stdio.h>
#include <string.h>

typedef struct student {
int num;        //学号
int score;    //分数
char name[20];
struct student *next;//指针域
}STU;

void link_creat_head(STU **p_head, STU *p_new)
{
STU *p_mov = NULL; //定义p_mov节点指针用于遍历
p_mov = *p_head;
if(NULL == *p_head) {//当第一次加入链表为空时,head执行p_new
*p_head = p_new;
p_new->next = NULL
} else { //第二次及以后加入链表
while(p_mov->next != NULL) {
p_mov = p_mov->next;//找到原有链表的最后一个节点
}
p_mov->next = p_new; //将新申请的节点加入链表
p_new->next = NULL;
}
}

int main(int argc, char *argv[])
{
STU *head, *p_new = NULL;
int num, i = 0;
printf("请输入链表初始个数:\n");
scanf("%d", &num);
for(i=0; i<num; i++) {
p_new = (STU *)malloc(sizeof(STU));
printf("请输入学号、分数、名字:\n");    //给新节点赋值
scanf("%d %d %s",&p_new->num,&p_new->score,p_new->name);
link_creat_head(&head,p_new);    //将新节点加入链表
//free(p_new);//不能释放!
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: