单向链表学习笔记
第一步 :定义结构体
typedef struct LinkNode{
char data;//数据域
struct LinkNode *next; //指针域
}LNode,*LinkNode;
第二步:初始化链表
LinkList intLinkList()
{
//定义新的节点 类型为LinkList
LinkList tempHeader;
//给新定义的临时变量分派空间
tempHeader=(LinkList)malloc(sizeof(LNode));
//初始化,让指针域和数据域都为空
tempHeader->data='\0';
tempHeader->next=NULL;
return tempHeader;
}
第三步;打印链表
//采取循环遍历的方式,依次打印
void printList(LinkList H)//无返回值,void类型,首先必须得有头结点
{
//定义新节点
LinkList p;
//让P等于头结点的指针域
p=H->next;//相当于是引线,
while(p!=NULL)
{
printf("%c",p->data);//因为在定义结构体时已经定义data为char
p=p->next;//每次进行更新
}
printf("\r\n");
}
第四步:基础操作
1. 增加元素
void addElement(LinkList H,char elem)
{
//定义新的节点
LinkList p,q;
//给两个节点分配任务
p=H;//p继续做引线
q=(LinkList)malloc(sizeof(LNode));//相当于一个容器,搬运工
//给搬运工进行装饰
q->next=NULL;
q-data=elem;
while(p->next!=NULL)
{
p=p->next;
}
p->next=q;
}
2. 插入元素
void insertElement(LinkList H,char elem,int paraposition)
{
//定义新节点
LinkList p,q;
//给两个分配任务
p=H;
q=(LinkList)malloc(sizeof(LNode));
//插入的元素进行判断 插入位置;链表的长度,结点的情况
if(q==0)
{
printf("error");
}
if(paraposition<0)
{
printf("error");
}
//循环变量,找位置,插入
for(int i=0;i<paraposition-1;i++)//位置-1是因为下标从0开始
{
p=p->next;//进行移动寻找
}
q->data=elem;
//进行连接
q->next=p->next;
p->next=p;
}
3. 删除元素
void deleteElement(LinkList H,char elem)
{
//定义新节点
LinkList p,q;
//分配任务
p=H;
q=(LinkList)malloc(sizeof(LNode));
//头结点进行移动
while((p->next!=NULL)&&(p->next->data!=elem))
{
p=p->next;
}
//进行判断
if(p->next==NULL)
{
printf("error\r\n");
return;
}
//如果while循环中p->next=NULL或找到目标元素,进行移动删除
q=p->next;
p->next=q->next;
free(q);//用free释放空间;
}
第五步:定义一个链表,进行测试
void addElementDelete()
{
//调用函数函数<初始化>
LinkList tempList=intLinkList();
//调用函数<打印链表>
printList(tempList);
//调用函数<增加元素>
addElement(tempList,'H');//函数(链表,元素);
addElement(tempList,'a');
addElement(tempList,'p');
addElement(tempList,'p');
addElement(tempList,'y');
addElement(tempList,'!');
printList(tempList);
//调用函数<删除元素>
deleteElement(tempList,'1');
deleteElement(tempList,'2');
deleteElement(tempList,'3');
printList(tempList);
//调用函数<插入元素>
insertElement(tempList,'F',1);
insertElement(tempList,'x',2);
insertElement(tempList,'y',3);
printList(tempList);
}
第六步:主函数
int main()
{
//调用测试函数
addInsertDelete();
return 0;
}