1.2.链式队列
head.h
#include <myhead.h>
typedef int datatype;
typedef struct seq
{union{datatype data;int len;};struct seq *next;
}seq,*S;
typedef struct PP
{S front;S rear;
}P;
P *create();
void input_tail(P *p,datatype n);
void pop_head(P *p);
void output(P *p);
void myfree(P *p);
fun.c
//创建
P *create()
{S H=(S)malloc(sizeof(seq));if(H==NULL){printf("申请失败\n");return NULL;}H->len=0;H->next=NULL;P *p=(P *)malloc(sizeof(P));if(NULL==p){printf("申请失败\n");return NULL;}p->front=H;p->rear=H;return p;
}
//入队尾插
void input_tail(P *p,datatype n)
{if(p->front==NULL){printf("队列不存在\n");return ;}S s=(S)malloc(sizeof(seq));s->data=n;s->next=NULL;//创建新结点p->rear->next=s;//将新节点赋值给rear的后一位p->rear=s;//rear重新指向最后一位p->front->len++;
}
//出队头删
void pop_head(P *p)
{//判空if(p->front==p->rear){printf("表空\n");return;}S s=p->front->next;p->front->next=s->next;free(s);s=NULL;p->front->len--;
}
//遍历
void output(P *p)
{if(p->front==NULL){printf("队列不存在\n");return ;}//判空if(p->front->next==NULL){printf("表空\n");return;}S s=p->front->next;while(s!=NULL){printf("%d\t",s->data);s=s->next;}printf("\n");
}
//释放
void myfree(P *p)
{if(p->front==NULL){printf("队列不存在\n");return ;}//判空if(p->front==p->rear){printf("表空\n");free(p->front);p->front=NULL;//释放头结点free(p);//释放头尾指针p=NULL;}S s=p->front->next;while(s!=NULL){S s2=s;s=s->next;free(s2);s2=NULL;}free(p->front);p->front=NULL;//释放头结点 free(p);//释放头尾指针p=NULL;
}
3.递归
#include <myhead.h>
int fun(int n)
{int m=n;int count=0;if(n<10){printf("%d\t",n);return 0;}while(n>9){n=n/10;count++;}printf("%d\t",n);n=m-n*pow(10,count);fun(n);
}
int main(int argc, const char *argv[])
{fun(12345);return 0;
}