PTA函数

该文描述了链表的创建和删除函数,包括循环链表的建立和在给定范围内的元素删除。此外,还涉及顺序表的创建、反转以及排序插入。同时,文章涵盖了二叉树的层次遍历以及图的深度优先搜索和广度优先搜索算法。

Status ListCreate_CL(LinkList &CL)

{

CL = (Linklist)malloc(sizeof(LNode));

LinkList rear = CL;

rear->next = NULL;

int n;

scanf("%d",&n);

for(int i=0;i<n;i++)

{

int num;

scanf("%d",&num);

LNode *t = (LNode*)malloc(sizeof(LNode));

t->data = num;

rear->next = t;

rear = t;

}

rear->next = CL;

return OK;

}

void ListDelete_CL(LinkList &CL,ElemType min,ElemType max)

{

LNode *p = CL;

LNode *q;

while(p->next !=CL)

{

q = p->next;

if(q->data>min && q->data < max)

{

q->next = p->next;

free(q);

}

else

p=p->next;

}

}

Status ListCreate_Sq(SqList &L)

{

L.elem = (ElemType *)mallocLIST_INIT_SIZE * sizeof(ElemType));

if(!L.elem)

exit(OVERFLOW);

L.listsize = LIST_INIT_SIZE;

L.length = ;

int n= 0;

scanf("%d",&n);

for(int i=0;i<n;i++)

{

scanf("%d",&(L.elem[i]));

L.length++;

}

return OK;

}

void ListReverse_Sq(SqList &L)

{

for(int i = 0;i<L.length/2;i++)

{

ElemType tmp = L.elem[i];

L.elem[i] = L.elem[L.length-1-i];

L.elem[L.length-1-i] = tmp;

}

}*/

Status ListInsert_SortedSq(SqList &L, ElemType e)

{

if(L.length == L.listsize)

{

L.elem = (ElemType *)realloc(L.elem,(1+L.length)*sizeof(ElemType));

}

int j=L.length;

for(;j>0;j--)

{

if(e>L.elem[j-1])

break;

else

L.elem[j]=L.elem[j-1];

}

L.elem[j]=e;

L.length++;

return OK;

}

void ListReverse_L(LinkList &L)

{

LinkList p,q;

p = L->next;

L->next=NULL;

while(p)

{

q=p;

p = p->next;

q->next = L->next;

L->next = q;

}

}*/

void LevelorderTraversal( BinTree BT )

{

if(BT=NULL)

return;

BinTree CC[10000];

CC[0] = BT;

int lens=1;

while(1)

{

if(lens == 0)

return;

int temp=0;

BinTree TH[10000];

for(int i=0;i<lens;i++)

{

if(CC[i]!=NULL)

printf(" %c",CC[i]->data);

if(CC[i]->Left!=NULL)

TH[temp++] = CC[i]->Left;

if(CC[i]->Right!=NULL)

TH[temp++] = CC[i]->Right;

}

lens = temp;

for(int i=0;i<lens;i++)

CC[i]=TH[i];

}

}*/

void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) ){

Visit(V);

Visited[V]=true;

for(int i=0;i<Graph->Nv;i++){

if(Graph->G[V][i]==1 && Visited[i]!=true){

DFS(Graph,i, Visit);

}

}

}

void BFS(LGraph Graph, Vertex S, void(*Visit)(Vertex))

{

int p [MaxVertexNum+10],a;

PtrToAdjVNode q = NULL;

int f = 0, r = 0;

p[r++] = S;

Visited[S] = true;

while (f!=r)

{

a = p[f++];

Visit(a);

q = Graph->G[a].FirstEdge;

while (q)

{

if (!Visited[q->AdjV])

{

p[r++] = q->AdjV;

Visited[q->AdjV] = true;

}

q = q->Next;

}

}

}

虽然给定的参考引用中未直接提及PTA函数题判断两点是否连通的具体内容,但可以基于之前关于判断两点连通的通用方法来举例说明可能的实现。 在图的场景中,使用深度优先搜索(DFS)判断两点是否连通的代码示例如下: ```c #include <stdio.h> #include <stdlib.h> #define MAX 100 typedef struct { int size; int graph[MAX][MAX]; } GraphMatrix; // 深度优先搜索函数 void IsOrNot(GraphMatrix *graphMatrix, int *visited, int source) { int j; visited[source] = 1; // 若i节点被访问到,visited[i]=1 for (j = 0; j < graphMatrix->size; j++) { if (graphMatrix->graph[source][j] != MAX && !visited[j]) { IsOrNot(graphMatrix, visited, j); } } } // 判断两点是否连通的函数 int isConnected(GraphMatrix *graphMatrix, int source, int destination) { int *visited = (int *)calloc(graphMatrix->size, sizeof(int)); IsOrNot(graphMatrix, visited, source); int result = visited[destination]; free(visited); return result; } int main() { GraphMatrix graphMatrix; graphMatrix.size = 5; // 假设图有5个节点 // 初始化图的邻接矩阵 for (int i = 0; i < graphMatrix.size; i++) { for (int j = 0; j < graphMatrix.size; j++) { if (i == j) { graphMatrix.graph[i][j] = 0; } else { graphMatrix.graph[i][j] = MAX; } } } // 添加边 graphMatrix.graph[0][1] = 1; graphMatrix.graph[1][0] = 1; graphMatrix.graph[1][2] = 1; graphMatrix.graph[2][1] = 1; int source = 0; int destination = 2; if (isConnected(&graphMatrix, source, destination)) { printf("两点连通\n"); } else { printf("两点不连通\n"); } return 0; } ``` 上述代码定义了图的邻接矩阵结构,通过深度优先搜索遍历图,判断两点是否连通。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值