#include <stdio.h>
#include <stdlib.h>
struct Node//单链表定义
{
ElemType data;
struct Node*next;
};
void LinkedListInit(LinkedList L)//不带头结点的单链表的初始化
{
L=NULL;
}
void LinkedListInit2(LinkedList L)//带头节点的单链表初始化
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败!");
exit(0);
}
L->next=NULL;
}
int LinkedListLength(LinkedList L)//单链表求表长
{
LNode*p;
p=L->next;
int j=0;
while(p!=NULL)
{
j++;
p=p->next;
}
return j;
}
LinkedList LinkListGetINode(LinkedList L,int i)//单链表获取第i个结点元素的操作
{
LNode*p;
p=L->next;
int j=1;
while((p!=NULL)&&(j<i))
{
p=p->next;
j++;
}
return p;
}
void LinkedListInsertQE1(LinkedList L,LinkedList p,ElemType e)//不带头结点的单链表的插入操作
{
q=(LNode*)malloc(sizeof(LNode));
if(q==NULL)
{
printf("申请空间失败!");
exit(0);
}
q->data=e;
if(p==L)
{
q->next=L;
L=q;
}
else
{
pre=L;
while((pre!=NULL)&&(pre->next!=p))
pre=pre->next;
q->next=pre->next;
pre->next=q;
}
}
void LinkedListInsertQE2(LinkedList L,LinkedList p,ElemType e)//带头结点的单链表的插入操作
{
q=(LNode*)malloc(sizeof(LNode))
{
if(q==NULL)
{
printf("fail!");
exit(0);
}
q->data=e;
pre=L;
while((pre!=NULL)&&(pre->next!=p))
pre=pre->next;
q->next=pre->next;
pre->next=q;
}
}
void LinkedListDeleteQE1(LinkedList L,LinkedList p,ElemType e)//不带头结点的单链表删除操作(若有多个值为e的结点则删除第一次出现的e)
{
pre=L;
while((pre!=NULL)&&(pre->next->data!=e))
pre=pre->next;
p=pre->next;
if(p!=NULL)
{
if(p==L)
L=p->next;
else
pre->next=p->next;
free(p);
}
}
void LinkedListDeleteQE2(LinkedList L,LinkedList p,ElemType e)//带头结点的单链表的删除操作
{
pre=L;
while((pre!=NULL)&&(pre->next->data)!=e))
{
pre=pre->next;
p=pre->next;
if(p!=NULL)
{
pre->next=p->next;
free(p);
}
}
}
void LinkedListCreateHeadL(LinkedList L,ElemType a[n])//用头插法创建带头结点的单链表
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败\n");
exit(0);
}
L->next=NULL;
for(i=0;i<n;i++)
{
p=(LNode*)malloc(sizeof(LNode));
if(p==NULL)
{
printf("申请空间失败!");
exit(0);
}
p->data=a[i];
p->next=L->next;
L->next=p;
}
}
void LinkedListCreateTailL(LinkedList L,ElemType a[n])//用尾插法创建带头节点的单链表
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败\n");
exit(0);
}
L->next=NULL;
tail=L;
for(j=0;j<n;j++)
{
p=(LNode*)malloc(sizeof(LNode));
if(p==NULL)
{
printf("申请空间失败!\n");
exit(0);
}
p->data=a[i];
p->next=NULL;
tail->next=p;
tail=p;
}
}
void LinkedListMergeLaLb(LinkedList La,LinkedList Lb,LinkedList Lc)//带头结点的单链表合并操作
{
pa=La->next;
pb=Lb->next;
Lc=La;
pc=Lc;
while((pa!=NULL)&&(pb!=NULL))
{
if(pa->data<=pb->data)
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa!=NULL)
pc->next=pa;
else
pc->next=pb;
Lb->next=NULL;
free(Lb);
}
//单链表常用的排序算法
//冒泡排序
NODE*BubbleSort1(NODE*head)
{
//冒泡排序(除头结点,单链表至少有一个结点)
for(NODE*temp=head->next;temp->next!=NULL;temp=temp->next)
{
for()
}
}
下面是一些复习过程中整理的单链表的操作集合
#include <stdio.h>
#include <stdlib.h>
struct Node//单链表定义
{
ElemType data;
struct Node*next;
};
void LinkedListInit(LinkedList L)//不带头结点的单链表的初始化
{
L=NULL;
}
void LinkedListInit2(LinkedList L)//带头节点的单链表初始化
{
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
{
printf("申请空间失败!");
exit(0);
}
L->next=NULL;
}
int LinkedListLength(LinkedList L)//单链表求表长
{
LNode*p;
p=L->next;
int j=0;
while(p!=NULL)
{
j++;
p=p->next;
}
return j;
}
LinkedList LinkListGetINode(LinkedList L,int i)//单链表获取第i个结点元素的操作
{
LNode*p;
p=L->next;
int j=1;
while((p!=NULL)&&(j<i))
{
p=p->next;
j++;
}
return p;
}
void LinkedListInsertQE1(LinkedList L,LinkedList p,ElemType e)//不带头结点的单链表的插入操作
{
q=(LNode*)malloc(sizeof(LNode));
if(q==NULL)
{
printf("申请空间失败!");
exit(0);
}
q->data=e;
if(p==L)
{
q->next=L;
L=q;
}
else
{
pre=L;
while((pre!=NULL)&&(pre->next!=p))
pre=pre->next;
q->next=pre->next;
pre->next=q;
}
}
void LinkedListInsertQE2(LinkedList L,LinkedList p,ElemType e)//带头结点的单链表的插入操作
{
q=(LNode*)malloc(sizeof(LNode))
{
if(q==NULL)
{
printf("fail!");
exit(0);
}
q->data=e;
pre=L;
while((pre!=NULL)&&(pre->next!=p))
pre=pre->next;
q->next=pre->next;
pre->next=q;
}
}
未完-------