/**************************链式队列*************************/头文件
#ifndef _LINKQUEUE_H_//链式队列
#define _LINKQUEUE_H_typedef int datatype;
typedef struct Node
{
union
{
datatype data;
int len;
};
struct Node *next;
}Node;typedef struct
{
Node * Head; //记录队列的头部
Node * Tail; //记录队列的尾部
}LinkQueue, *LinkQueuePtr;//创建队列
LinkQueuePtr list_create();//判空
int list_empty(LinkQueuePtr LQ);//入队
int list_push(LinkQueuePtr LQ,datatype e);//出队
int list_pop(LinkQueuePtr LQ);//销毁队伍
void list_free(LinkQueuePtr LQ);
#endif
主函数
#include "linkqueue.h"
#include <stdlib.h>
#include <stdio.h>//创建队列
LinkQueuePtr list_create()
{
//创建队列
LinkQueuePtr LQ=(LinkQueuePtr)malloc(sizeof(LinkQueue));
if(NULL==LQ)
{
printf("创建失败\n");
return NULL;
}
//创建成功的话里面有两个指针
//LQ->Head LQ->Tail 这是两个野指针
//申请一个链表,将Head指针指向头结点
LQ->Head=(Node *)malloc(sizeof(Node));
if(NULL==LQ->Head)
{
printf("创建失败\n");
return NULL;
}
//成功后需要对链表初始化
LQ->Head->len=0;
LQ->Head->next=NULL;//将尾指针指向头结点
LQ->Tail=LQ->Head;printf("队列创建成功\n");
return LQ;
}//判空
int list_empty(LinkQueuePtr LQ)
{
if(NULL==LQ||NULL==LQ->Head)
{
printf("队列不合法\n");
return -1;
}
return LQ->Head==LQ->Tail;//相等则表示空
}//入队
int list_push(LinkQueuePtr LQ,datatype e)
{
if(NULL==LQ)
{
printf("队列不合法\n");
return 0;
}
//1、申请结点封装数据
Node *p=(Node*)malloc(sizeof(Node));
if(NULL==p)
{
printf("入队失败\n");
return 0;
}
//将数据封装到结点中
p->data=e;
p->next=NULL;//2、将新结点连接到队尾指针指向的结点后面
LQ->Tail->next=p;
//3、更新尾指针
LQ->Tail=p;LQ->Head->len++;
printf("入队成功\n");
return 1;
}//出队
int list_pop(LinkQueuePtr LQ)
{
if(NULL==LQ||list_empty(LQ))
{
printf("出队失败\n");
return -1;
}
//1、标记要出队的点
Node *p=LQ->Head->next;
//2、孤立要删的结点
LQ->Head->next=p->next;
printf("%d出队成功\n",p->data);
//3、释放要删的结点
free(p);
p=NULL;
//队伍长度减
LQ->Head->len--;//判断队伍是否已经删除完所有结点
if(LQ->Head->next==NULL)
{
//将尾指针重新指向头结点
LQ->Tail=LQ->Head;
}
return 1;
}//销毁队伍
void list_free(LinkQueuePtr LQ)
{
if(NULL==LQ)
{
printf("释放失败\n");
return;
}
//1、释放整个链表
while(!list_empty(LQ))
{
list_pop(LQ);
}
//释放头结点
free(LQ->Head);
LQ->Head=LQ->Tail=NULL;//2、释放队列
free(LQ);
LQ=NULL;
printf("释放成功\n");
}
测试文件
#include <stdlib.h>
#include <stdio.h>int main(int argc, const char *argv[])
{
LinkQueuePtr LQ=list_create();
if(NULL==LQ)
{
return -1;
}//入队函数
list_push(LQ,1);
list_push(LQ,2);
list_push(LQ,3);
list_push(LQ,4);
list_push(LQ,5);//出队函数
list_pop(LQ);
//释放
list_free(LQ);
return 0;
}
#include <myhead.h> //输入一个数,递归输出该数的每一位
int fun(int val)
{
if(val>=10) //递归出口
{
fun(val/10); //(n/10)使其逐渐接近(n>9)这个限制条件
}
printf("%d ",val%10);
}
//主函数
int main(int argc, const char *argv[])
{
int val;
printf("请输入一个整数:");
scanf("%d",&val);
fun(val);
putchar(10);
return 0;
}