目录
单向链表创建与插入
语法解释
typedef struct link
{
int data;
struct link* next;
} linklist, * pointer;
//这里将 结构体名称struct link 起别名为linklist
// 结构体类指针 别名为pointer
内存分配
head=(pointer)malloc(sizeof(struct link));
head=(pointer)malloc(sizeof(linklist));
//以上两种分配方式都可
//格式 head=(结构体指针类)malloc(sizeof(结构体名称));
一个有意思的现象 在codeblocks上C语言分配
head=(pointer)malloc(sizeof(struct link));
不能省去struct 只能struct link或者用别名 linklist
而c++却可以直接写成
head=(pointer)malloc(sizeof(link));
不知道为什么
链表创建
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
int data;
struct link* next;
} linklist, * pointer;
int main()
{
int n;
pointer head,ended,p;
head=(pointer)malloc(sizeof(linklist));
head=ended;
//如令这两个节点指向NULL 可以拿来判断链表是否为空
//ended 代替其遍历 head就代表这个链表
return 0;
}
为什么链表要带头结点,而且不存放数据?
//带头节点不管链表是否为空 指针都不会指向空
//在对空链表的增加操作上带头结点的直接head->next=creat;//creat为新开辟的同类型空间
//区别不是很大
头节点也能存放数据 如链表长度 head->data++;
head->data=0;
//一定要记得初始化 头结点的数据域的值
//但是不能在定义结构体的时候初始化data的值 会报错!!
for(int i=0;i<5;i++)
head->data++;
printf("%d",head->data);
//结果是5
链表插入(尾插法)用于顺序输出
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
int data;
struct link* next;
} linklist, * pointer;
int main()
{
//尾插法
int n;
printf("请输入链表节点数:\n");
scanf("%d",&n);
pointer head,ended,p,creat;
head=(pointer)malloc(sizeof(linklist)); #1
ended=head;
//head->data