链表中最常见的两种循环 选p=plist还是p=plist->next

链表中最常用的两种循环

需要前驱信息,例如插入,删除等

 for(p=plist;p->next!=NULL;p=p->next);

遍历数据节点,例如,长度,Show,查找等

for(p=plist->next;p!=NULL;p=p->next);

具体应用可看其他文章
(例如:单链表文章中,实现不同操作时的for语句选择)

#include<stdio.h> #include<stdlib.h> #include<math.h> typedef struct DoubleNode { int data; struct DoubleNode* llink; struct DoubleNode* rlink; }DoubleNode, * PDoubleNode; typedef struct DlinkList { PDoubleNode head; PDoubleNode tail; int length; }DlinkList, * PDlinkList; PDoubleNode createNode(int value) { PDoubleNode p = (PDoubleNode)malloc(sizeof(DoubleNode)); p->data = value; p->llink = NULL; p->rlink = NULL; return p; } void appendNode(PDlinkList pList, int value) { PDoubleNode pNode = createNode(value); if (pList->head == NULL) { pList->head = pNode; pList->tail = pNode; } else { pList->tail->rlink = pNode; pNode->llink = pList->tail; pList->tail = pNode; } pList->length++; } int calculatek(int n) { double sum = 0; int k = 1; while (sum <= n + 1) { sum += log10((k * 2 + 1) / (double)k); k++; } return k - 1; } int calculatePI(int n) { int k = calculatek(n); PDlinkList arc = (PDlinkList)malloc(sizeof(DlinkList)); PDlinkList PI = (PDlinkList)malloc(sizeof(DlinkList)); for (int i = 0; i < n; i++) { appendNode(arc, 0); } for (int i = 0; i < n; i++) { appendNode(PI, 0); } PDoubleNode p1 = arc->head; PDoubleNode p2 = PI->head; p1->data = 1; p2->data = 2; p1 = arc->tail; p2 = PI->tail; int carry = 0; int temp = 0; int j; for (int i = 1, j = 3; i <= k; i++, j += 2) { while (p1 != arc) { temp = p1->data * j + carry; carry = temp / 10; temp = temp % 10; p1->data = temp; p1 = p1->llink; } carry = 0; p1 = arc->head; while (p1 != NULL) { temp = p1->data + carry * 10; carry = temp % j; temp = temp / j; p1->data = temp; p1 = p1->rlink; } carry = 0; while (p1 != arc && p2 != PI) { temp = p1->data * 2 + p2->data + carry; carry = temp / 10; temp = temp % 10; p2->data = temp; p1 = p1->llink; p2 = p2->llink; } } printf("%d.", p2->data); p2 = p2->rlink; for (int i = 1; i <= n; i++) { printf("%d", p2
最新发布
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值