當前位置:首頁 » 編程語言 » c語言遞歸遍歷數組
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言遞歸遍歷數組

發布時間: 2023-03-21 11:31:25

『壹』 c語言遍歷數組

因為數組是從0開始算起的
所以a[2][3]數起來是
第0行和第1行
第0列,第1列,第2列
i表示的是行,當初始化i=0時表示的是第0行,當i++之後,i=1時表示的是第1行,已經表示完數組的行數了,當i=2時已經數組越界了~所以i〈2這里和〈=1效果是一樣的
同理
可解釋j

『貳』 C語言:用遞歸的方式對數組排序

#include<stdio.h>

#defineN8

voidselection_sort(inta[],intn){
inti,t,imax=0;
if(n<1)return;
for(i=1;i<n;++i){
if(a[imax]<a[i])
imax=i;
}
if(imax!=n-1){
t=a[n-1];
a[n-1]=a[imax];
a[imax]=t;
}
selection_sort(a,n-1);
}

intmain(void){
inti,a[N]={8,5,4,6,1,2,3,7};
printf("排序前: ");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf(" ");
selection_sort(a,N);
printf("排序後: ");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf(" ");
return0;
}

『叄』 c語言數組遞歸

遞歸過程中每次調用函數時形參p對應的實參都不同

『肆』 C語言遍歷字元串數組

針對每個字元遍歷就可以,如果大字元串長度n、固定長度為m,那麼循環為:
for (i=0;i<n-m;i++)
{
....

}

『伍』 C語言中,遞歸先序遍歷和非遞歸先序遍歷的有何區別各自優缺點

1、遞歸就是函數調用函數本身,運行起來就是函數嵌套函數,層層嵌套,所以函數調用、參數堆棧都是不小的開銷,但是程序簡單。
2、非遞歸就是不斷地對參數入棧、出棧,省去了函數層層展開、層層調用的開銷。雖然參數出入棧次數多了,但是一般都開辟固定的足夠大的內存來一次性開辟、重復使用。
3、非遞歸是從堆棧的角度來編寫程序,速度快,但代碼復雜。
遞歸是從問題本身的邏輯角度來編寫,雖然速度相對慢,但代碼容易理解。
如果對速度要求不高,建議用遞歸方式。
4、摘錄例子如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;//二叉樹的節點類型
typedef struct QNode
{
BiTNode data;
struct QNode *next;
} QNode,*QueuePtr;//隊列節點類型
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;//隊列的頭尾指針
void InitQueue(LinkQueue *Q)//創建隊列
{
Q->front=Q->rear=(QueuePtr)malloc(sizeof(QNode));
Q->rear->next=NULL;
}
void EnQueue(LinkQueue *Q,BiTNode e)//入隊操作
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}
BiTNode DeQueue(LinkQueue *Q)//出對操作
{
BiTNode e;QueuePtr p;
p=Q->front->next;
e=p->data;
Q->front->next=p->next;
if(Q->rear==p)
Q->rear=Q->front;
free(p);
return (e);

}
int QueueEmpty(LinkQueue *Q)//判斷隊列是否為空
{
if(Q->front==Q->rear )
return 1;
else
return 0;
}
BiTree CreateBiTree()//創建二叉樹
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
T->data=p;
T->lchild=CreateBiTree(T->lchild);
T->rchild=CreateBiTree(T->rchild);
}
return (T);
}
void PreOrder(BiTree T)//先序
{
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}

void LevelOrder(BiTree T)//層次遍歷
{
LinkQueue Q; BiTNode p;
InitQueue(&Q);
EnQueue(&Q,*T);
while(!QueueEmpty(&Q))
{
p = DeQueue(&Q);
printf("%c",p.data);
if(p.lchild!=NULL)
EnQueue(&Q,*(p.lchild));
if(p.rchild!=NULL)
EnQueue(&Q,*(p.rchild));
}
}

void main()
{
BiTree Ta;
Ta=CreateBiTree();
printf("層次遍歷:");
printf("\n");
LevelOrder(Ta);
printf("\n");
printf("先序遍歷:");
printf("\n");
PreOrder(Ta);
}

層次使用非遞歸的,用到隊列
先序是用遞歸的
創建樹使用先序遞歸建樹

輸入個例子:
abc**de*f**g***(注意*代表空格,因為空格你看不到就不好表示).