单链表
【单链表】定义
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkList;
【单链表带头节点】头插法建表
LinkList list_head_insert(LinkList& L)
{
LNode* s;
int x;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
scanf("%d", &x);
while (x != 9999)
{
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = L->next;
L->next = s;
scanf("%d", &x);
}
return L;
}
【单链表带头节点】尾插法建表
LinkList list_tail_insert(LinkList &L)
{
int x;
L=(LinkList)malloc(sizeof(LNode));
LNode *s, *r = L;
scanf("%d",&x);
while(x!=9999)
{
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
【单链表带头节点】按位序查找
LNode *GetElem(LinkList L,int i)
{
int j=1;
LNode *p=L->next;
if(i==0) return L;
if(i<1) return NULL;
while(p&&j<i)
{
p=p->next;
j++;
}
return p;
}
【单链表带头节点】按值查找
LNode *LocateElem(LinkList L,ElemType e)
{
LNode *p=L->next;
while(p!=NULL&&p->data!=e)
{
p=p->next;
}
return p;
}
【单链表带头节点】在指定位序插入新节点
bool ListFrontInsert(LinkList L,int i,ElemType e)
{
LinkList p=GetElem(L,i-1);
if(NULL==p)
{
return false;
}
LinkList s=(LNode*)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
【单链表带头节点】删除指定位序的节点
bool ListDelete(LinkList L,int i)
{
LinkList p=GetElem(L,i-1);
if(NULL==p)
{
return false;
}
LinkList q;
q=p->next;
p->next=q->next;
free(q);
return true;
}
【单链表带头节点】依次打印节点值
void print_list(LinkList L)
{
L = L->next;
while (L != NULL)
{
printf("%3d", L->data);
L = L->next;
}
printf("\n");
}