1、有序单链表:随机输入n个单字符【无序的】,输出升序的结果例如:输入dahkew​ ,输出adehkw 2、单向链表,实现‘b‘--‘h‘字符的逆置

函数声明文件

#ifndef __HEAD_H__
#define __HEAD_H__


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node
{
 union{
  int len;
  datatype data;
 };
 struct node *next;
}*Linklist,Node;


void LinklistFree(Linklist L);
void LinklistShow(Linklist L);
void LinklistSort(Linklist L,char key);
Linklist CreateRear();
Linklist CreateHead();
void nizhi(Linklist L);

#endif

调用函数文件 

#include"head.h"

Linklist CreateHead()
{
 Linklist p=(Linklist)malloc(sizeof(Node));
 //判断是否申请成功
 if(p==NULL)
 {
  printf("申请失败\n");
  return NULL;
 }
 p->len=0;
 p->next=NULL;
 return p;
}
//创建普通节点
Linklist CreateRear()
{
 Linklist p=(Linklist)malloc(sizeof(Node));
 //判断是否申请成功
 if(p==NULL)
 {
  printf("普通节点申请失败\n"); 
  return NULL;
 }
 //初始化
 p->data=0;
 p->next=NULL;
 return p;
}

//链表排序
void LinklistSort(Linklist L,char key)
{
 //调用函数创建普通节点
 Linklist q=CreateRear();
 if(q==NULL)
  return;
 q->data=key;//赋值
 Linklist p=L;
 while(p->next!=NULL&&p->next->data<q->data)
 {
  p=p->next;
 }
 q->next=p->next;
 p->next=q;
 L->len++;
}

//链表遍历
void LinklistShow(Linklist L)
{
 while(L->next)
 {
  L=L->next;
  printf("%c\t",L->data);
 }
}
void LinklistFree(Linklist L)
{
 if(L==NULL)
  return;
 for(Linklist p=L->next;p!=NULL;)
 {
  L->next=p->next;
  free(p);
  p=L->next;
 }
}
void nizhi(Linklist L)
{
 if(L==NULL||L->len==1)
 
  return;
 Linklist q=L->next;
 L->next=NULL;
 while(q)
 {
  Linklist t=q;
  q=q->next;
  t->next=L->next;
  L->next=t;
 }
}

主函数文件

#include"head.h"
int main(int argc, const char *argv[])
{
 //申请单链链表头
 Linklist L=CreateHead();
 //判断是否申请成功
 if(L==NULL)
  return 0;
 int n;
 printf("请输入要排序的单字符的个数:");
 scanf("%d",&n);
 char key;
 for(int i=0;i<n;i++)
 {
   printf("请输入字符:");
  getchar();
  scanf("%c",&key);
  LinklistSort(L,key);
 }
 //链表遍历
 LinklistShow(L);
 //逆置
 nizhi(L);
 LinklistShow(L);
 //利用函数释放链表空间
 LinklistFree(L);
 free(L);
 L=NULL; 
 return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值