带头结点的单循环链表做队列,只设置尾指针,结点插入:
int enqueue(LNode *rear,int e)
{
LNode *p;
p=(LNode*)malloc(sizeof(LNode));
if (!p)
return -1
p->data=e;
p->next=rear->next;
rear->next=p;
rear=p;
}
不带头结点循环队列入队、出队,只设置一个指向队尾元素的指针rear,不设队头指针
typedef struct Node
{
ElemType data;
struct Node *next;
}Node,*Que;//结构体定义
//入队
Status enQueue(Que &rear,ElemType e)
{
s=(struct Node*)malloc(sizeof(Node));
s->data=e;
if(rear==NULL)
{
rear=s;
rear->next=Q;
}
else
{
s->next=Q->next;
rear->next=s;
rear=s;
}
return OK;
}
//出队
Status DeQueue(Que &Q,ElemType &e)
{
LNode *q;
if(Q==NULL)
return ERROR;
q=Q->next;
if(Q==q)
Q=NULL;
else
Q->next=q->next
}
求二叉树的叶子节点个数
typedef struct BTNode
{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
int count(BTNode *bt)
{
int count=0;
if(bt==NULL)
return 0;
else if(bt->lchild==NULL&&bt->rchild==NULL)
count=1;
else
{
return count(bt->lchild)+count(bt->rchild);
}
return count;
}
有序顺序表的折半查找
typedef struct SqList
{
int *elem;
int length;
}SqList;
int Bsearch(SqList L,int key)
{
int low=0;
int high=L.length;
int mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(L.elem[mid]==key)
return mid;
if(L.elem[mid]>key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
进制转换(十进制转换为8进制)
void conversion()
{
InitStack(S);
scanf("%d",x);
while(x)
{
PUSH(S,x%8);
x=x/8;
}
while(!StackEmpty(S))
{
POP(S,&e);
printf("%d",e);
}
}
求二叉树深度的递归算法
typedef struct BTNode
{
int data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
int getdepth(BTNode T)
{
int depth,depthl,depthr;
if(T==NULL)
depth=0;
else
{
depthl=getdepth(T->lchild);
depthr=getdepth(T->rchild);
depth=1+(depthl>depthr?depthl:depthr);
}
return depth;
}
将两个递增的链表归并为一个递减的线性表(合并+头插法)
void MergeB(LNode *La,LNode *Lb)
{
LNode *Lc;
LNode *p=La;
LNode *q=Lb;
LNode *s;
Lc=La;
Lc->next=NULL;
free(Lb);
while(p!=NULL&&q!=NULL)
{
if(p->data>=q->data)
{
s=p;//s用来接收新结点
s->next=Lc->next;
Lc->next=s;
p=p->next;
}
else
{
s=q;
s->next=Lc->next;
Lc->next=s;
q=q->next;
}
}
while(p!=NULL)
{
s=p;
s->next=Lc->next;
Lc->next=s;
p=p->next;
}
while(q!=NULL)
{
s=q;
s->next=Lc->next;
Lc->next=s;
q=q->next;
}
show(Lc);
}