1.单链表的定义
typedef struct LNode{
Elemtype data;
struct LNode *next;
}LNode,*LinkList;
2.单链表的遍历操作
void displayNode(List head)
{
p=head->next;
while(p->next!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
3.求单链表元素的个数
//求单链表元素的个数
int length(Link head){
p=head->next;
count=0;
while (p!=NULL){
p=p->next;
count++;
}
return count;
}
4.单链表的查找操作
//单链表的查找操作
int queryNode(Link head){
p=head->next;
while (p!=NULL){
if(p->data==x){
printf("p->data");
return turn;
}
p=p->next;
}
return false; //如果到p=null时结果没有找到x,则为false
}
5.单链表的插入操作
//插入操作实战代码
bool insertNode(Link head,int i,DataType x)
{
p=head->next;
count=0;
while (p!=NULL && count<i-1) //查找第i-1个元素
{
p=p->next;
count++;
}
if(p=NULL){
return false;
} else{
node=(LinkList)malloc(sizeof (LNode));
node->data=x;
node->next=p->next;
p->next=node;
return turn;
}
}
6.头插法多次插入
//头插法循环插入
Link newList(DataType a[],int n){
a[5]={35,12,24,33,42};
head=(LinkList)malloc(sizeof (LNode));
head->next=NULL;
for (int i = 0; i <n ; i++) {
node=(LinkList)malloc(sizeof (Node));
node->data=a[i];
node->next=head->next;
head->next=node;
}
return head;
}
7.尾插法多次插入
//尾插法循环插入
Link newList(DataType a[],int n) {
a[5]={5,7,9,2,1};
head=(LinkList)malloc(sizeof (Node)); //生成头结点
head->next=NULL;
rear=head; //尾指针初始化
for (int i = 0; i < n; i++) {
node=(LinkList) malloc(sizeof (Node));
node->data=a[i];
rear->next=node;
rear=node;
}
rear->next=NULL;
return head;
}
}
8.单链表删除操作
(1)前提:建立指针一前一后的效果
初始化:
q=head;
p=q->next;
移动一次后进行赋值
q=p;
p=p->next
判断:
在删除之前进行判断是否头结点(head)为空
小贴士:如果头结点为空就是动态分配内存失败了
实现代码如下:
if(head==NULL || head->next==NULL){
return false;
}
Link deleNode(List head,DataType x) {
if (head == NULL || head->next == NULL) {
return false; //判断是否为空表
}
q=head; //初始化q,p与head的关系
p=head->next;
while (p!=NULL){
if(p->next==x) {
q->next = p->next;
free(p);
return turn;
}
else{
p=q;
q=q->next;
}
}
return false;