#include <string.h>
#include <stdio.h>
#include <malloc.h>
typedef char ElemType;
typedef struct LNode //声明
{
ElemType data;
struct LNode *next;
}LinkNode;
void Sqlit1(LinkNode *&L)
{
LinkNode *pre,*p,*q;
if (L->next == NULL || L->next->next == NULL)
return;
int x=L->next->data; //x为首结点
pre =L->next; //pre指向首结点
p=pre->next;
while (p!=NULL)
{
if (p->data<x) //1、p结点的值<x
{
pre->next=p->next;
p->next=L->next;
L->next=p;
p=pre->next;
}
else //2、p结点的值>=x
{
pre=p; //pre,p同步后移
p=pre->next;
}
}
}
void CreateListR(LinkNode *&L,ElemType a[],int n) //用尾插法建立单链表
{
LinkNode *s,*r;
L= (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
L->next = NULL;
r=L; //r始终指向尾结点
for (int i=0;i<n;i++)
{
s=(LinkNode *)malloc(sizeof(LinkNode)); //创建新结点s
s->data =a[i];
r->next =s; //将s插入r之后
r=s;
}
r->next =NULL; //尾结点的next域置为空
}
void DispList(LinkNode *L) //输出线性表
{
LinkNode *p=L->next; //p指向首结点
while (p!=NULL)
{
printf("%c\t",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
LinkNode *L;
ElemType a[]="daxgdchaeb";
int n=strlen(a);
CreateListR(L,a,n);
printf("L:");
DispList(L);
printf("以首结点值进行划分\n");
Sqlit1(L);
printf("L:");
DispList(L);
}