2023/2/7 作业:
1、有序单链表: 随机输入n个单字符[无序的],输出升序的结果
例如:输入dahkew
输出adehkw
main.c
for(int i=0;i<n;i++)
{
scanf(" %c",&e);
OrderedLinklist(L,e);
}
LinklistShow(L);
test.c
//有序单链表
void OrderedLinklist(Linklist L,datatype e)
{
Linklist p=L;
Linklist q=LinklistCreateNode();
q->data=e;
while(p->next&&p->next->data < q->data)
{
p=p->next;
}
q->next=p->next;
p->next=q;
}
2、单向链表,实现’b’-'h’字符的逆置
int main(int argc, const char *argv[])
{
Linklist L=LinklistCreateHead();
if(L==NULL)
{
return -1;
}
datatype e;
int n;
printf("输入插入数据个数:");
scanf("%d",&n);
/*
//头插:在头结点后插入
for(int i=0;i<n;i++)
{
scanf(" %c",&e);
InsertHead(L,e);
}
*/
//尾插:在最后一个结点插入新结点
for(int i=0;i<n;i++)
{
scanf(" %c",&e);
InsertRear(L,e);
}
//链表逆置,使用头结点后的结点依次头插
LinklistRev(L);
printf("逆置后的链表为:\n");
LinklistShow(L);
//释放空间
LinklistFree(L);
L=NULL;
return 0;
}
//创建头结点
Linklist LinklistCreateHead()
{
Linklist L=(Linklist)malloc(sizeof(Node));
if(L==NULL)
{
return NULL;
}
L->len=0;//链表长度为0
L->next=NULL;//链表指针域为空
return L;
}
//创建普通结点
Linklist LinklistCreateNode()
{
Linklist p=(Linklist)malloc(sizeof(Linklist));
if(p==NULL)
{
return NULL;
}
p->data=0;//创建新结点的数据域清0
p->next=NULL;//创建新结点指针域为空
return p;
}
//头插
void InsertHead(Linklist L,datatype e)
{
//创建新结点
Linklist p=LinklistCreateNode();
if(p==NULL)
{
return;
}
p->data=e;
p->next=L->next;
L->next=p;
L->len++;
}
//尾插
void InsertRear(Linklist L,datatype e)
{
//创建新结点,先找到最后一个结点
Linklist p=LinklistCreateNode();
Linklist q=L;
if(p==NULL)
{
return;
}
while(q->next)//q->next!=NULL;
{
q=q->next;
}
p->data=e;
q->next=p;
L->len++;
}
//遍历链表
void LinklistShow(Linklist L)
{
/*
Linklist p=L;
for(int i=0;i<L->len;i++)
{
p=p->next;
printf("%-3c",p->data);
}
*/
while(L->next)//L->next!=NULL;
{
L=L->next;
printf("%-3c",L->data);
}
printf("\n");
}
//链表逆置
void LinklistRev(Linklist L)
{
Linklist p=L->next;//p保存第一个结点
L->next=NULL;//分离头结点
Linklist temp;
while(p)
{
temp=p;//temp保存p的第一个结点
p=p->next;//p后移
//对L结点头插temp
temp->next=L->next;
L->next=temp;
}
}
//链表释放空间
void LinklistFree(Linklist L)
{
if(L->len==0)
{
return;
}
for(int i=0;i<L->len;i++)
{
DeleteHead(L);
}
free(L);
}