PTA函数

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 函数变换实现方法 #### 复数域中的函数解析延拓唯一性 在复分析领域,函数的解析延拓具有独特的性质。对于实函数而言,其解析延拓可以存在无限种可能性[^1]。然而,在复平面中,如果一个函数在其定义域上是解析的,则它的解析延拓方式是唯一的。这种特性使得复变函数理论成为研究函数变换的重要工具。 #### 使用泰勒级数逼近余弦函数 针对 `funcos` 的实现需求,可以通过泰勒展开来近似计算 $\cos(x)$ 值。具体来说,$\cos(x)$ 可以表示为其麦克劳林级数形式: $$ \cos(x) = \sum_{k=0}^\infty (-1)^k \frac{x^{2k}}{(2k)!} $$ 为了满足误差要求 $e$,可以在每次迭代时比较当前项与前一项之间的差值大小。当该差值小于等于指定误差上限时停止计算并返回结果[^2]。 以下是基于上述原理编写的 C 语言代码示例: ```c #include <math.h> double funcos(double e, double x){ int k; double term = 1.0, cos_val = term; for(k=1; fabs(term)>e ; ++k ){ term *= -x*x / ((2*k-1)*(2*k)); cos_val += term ; } return cos_val; } ``` #### 字符串操作之字符移位功能 关于字符串处理方面,“移动字母”的题目展示了如何通过数组索引来完成特定模式下的数据重新排列工作。这里采用了一个辅助数组存储调整后的顺序后再复制回原数组位置的方法[^3]。 下面是改进版逻辑更清晰易懂版本: ```c void Shift(char s[]) { int len = strlen(s); // 创建临时缓冲区用于保存新序列 char temp[len]; // 将最后三个字符放到前面 strncpy(temp, &(s[len-3]), 3); // 添加剩余部分至后面 strncat(temp, s, len-3); // 更新原始字符串内容 strcpy(s,temp); } ``` #### 矩阵遍历求解非边界元素总和 矩阵运算也是常见的算法练习之一。下面的例子演示了怎样读取二维整型方阵,并统计除最外层边框之外的所有内部单元格数值加起来的结果[^4]。 程序片段如下所示: ```c int main(){ ... // 初始化累加器变量 sum=0; // 输入维度尺寸以及对应的数据填充过程省略... // 遍历整个表格区域 for(i=0;i<n;i++){ for(j=0;j<n;j++){ // 跳过不符合条件的位置 if( !(j+1==n || i+j==n-1 || i+1==n)){ sum+=a[i][j]; } } } printf("%d",sum); return 0; } ``` #### 打印沙漏图案的应用案例 最后一个例子涉及图形绘制技巧——构建由星号组成的倒置金字塔形状结构。此过程中运用到了循环控制语句配合简单的算术表达式动态调节每一行输出宽度变化规律[^5]。 核心思路总结为两点:一是逐行增加层数的同时扩展两翼长度;二是确保总体占用空间不超过预定限额N的前提下持续叠加直至达到极限状态为止。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值