1. 顺序表的查找操作
int LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<L.length; i++){
if(L.elem[i]==e){
return i+1;
}
}
return 0;
}
2.求顺序表最大值
int GetMax(SqList L)
{
if(L.length==0) return 0;
int max = L.elem[0];
for(int i=1;i<L.length;i++){
if(max<L.elem[i])
max = L.elem[i];
}
return max;
}
3.单链表遍历
void Traverse(LinkList L)
{
LinkList p=L->next;
while(p){
printf("%d ",p->data);
p=p->next;
}
return;
}
4.求单链表元素序号
int Locate( LinkList L, ElemType e){
LinkList p = L->next;
int sum = 1;
while(p){
if(p->data == e){
return sum;
}
sum++;
p=p->next;
}
return 0;
}
5.统计单链表元素出现次数
int GetCount ( LinkList L,ElemType e ){
LinkList p = L->next;
int sum = 0;
while(p){
if(p->data == e)
sum++;
p = p->next;
}
return sum;
}
6.在带头结点的单链表表尾处插入一个新元素
void insert ( LinkList L,ElemType e){
LinkList p = L->next;
LinkList pre =L;
while(p){
p=p->next;
pre = pre->next;
}
LinkList s = (LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=NULL;
pre->next=s;
}
7. 顺序表替换负数并统计个数
int Replace(SqList &L,int e)
{
int cnt=0;
for(int i=0;i<L.length;i++){
if(L.elem[i]<0){
cnt++;
L.elem[i]=e;
}
}
return cnt;
}
8.顺序表替换偶数并统计个数
int Replace(SqList &L,int e)
{
int cnt=0;
for(int i=0;i<L.length;i++){
if(L.elem[i]%2==0){
cnt++;
L.elem[i]=e;
}
}
return cnt;
}
9.统计二叉树结点个数
int NodeCount ( BiTree T){
if(!T) return 0;
int sum = 1;
sum += NodeCount(T->lchild);
sum += NodeCount(T->rchild);
return sum;
}
10.统计二叉树叶子结点个数
int LeafCount ( BiTree T){
if(!T) return 0;
int sum =0;
if(!T->lchild&&!T->rchild)sum++;
sum+=LeafCount(T->lchild);
sum+=LeafCount(T->rchild);
return sum;
}
11.统计二叉树度为1的结点个数
int NodeCount(BiTree T){
if(!T) return 0;
int cnt =0;
if(T->lchild&&!T->rchild||!T->lchild&&T->rchild) cnt++;
cnt+=NodeCount(T->lchild);
cnt+=NodeCount(T->rchild);
return cnt;
}
12.统计二叉树度为2的结点个数
int NodeCount(BiTree T){
if(!T) return 0;
int cnt =0;
if(T->lchild&&T->rchild) cnt++;
cnt+=NodeCount(T->lchild);
cnt+=NodeCount(T->rchild);
return cnt;
}
13.先序输出叶结点
void PreorderPrintLeaves(BinTree BT)
{
if(!BT) return;
if(!BT->Left&&!BT->Right) printf(" %c",BT->Data);
PreorderPrintLeaves(BT->Left);
PreorderPrintLeaves(BT->Right);
}
14.后缀表达式
void Suffix(BiTree T){
if(!T) return;
Suffix(T->lchild);
Suffix(T->rchild);
printf("%c ",T->data);
}
15. 一元多项式正系数项
int PositiveCnt(LinkList L){
LinkList p = L->next;
int cnt=0;
while(p){
if(p->coef>0){
printf("%d %d\n",p->coef,p->exp);
cnt++;
}
p=p->next;
}
return cnt;
}
16.运算符前缀式
int Prefix(BiTree T){
if(!T) return 0;
int cnt =0;
if(T->data=='+'||T->data=='-') cnt++;
if(T->lchild&&T->rchild) printf("%c ",T->data);
cnt+=Prefix(T->lchild);
cnt+=Prefix(T->rchild);
return cnt;
}
17.运算符中缀式
int Infix(BiTree T){
if(!T) return 0;
int cnt =0;
if(T->data=='*'||T->data=='/') cnt++;
cnt+=Infix(T->lchild);
if(T->lchild&&T->rchild) printf("%c ",T->data);
cnt+=Infix(T->rchild);
return cnt++;
}
18.运算符后缀式
int Suffix(BiTree T){
if(!T) return 0;
int cnt =0;
if(T->data=='*'||T->data=='+') cnt++;
cnt+=Suffix(T->lchild);
cnt+=Suffix(T->rchild);
if(T->lchild&&T->rchild) printf("%c ",T->data);
return cnt++;
}