main2-3-3.c 检验bo2-5.c的主程序

本文介绍了一个使用双向链表进行各种操作的C语言程序示例,包括插入、删除、遍历等基本功能,并展示了如何利用自定义函数完成这些任务。

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

 /* main2-3-3.c 检验bo2-5.c的主程序 */
 #include"c1.h"
 typedef int ElemType;
 #include"c2-4.h"
 #include"bo2-5.c"
 #include"func2-3.c" /* 包括equal()、comp()、print()、print2()和print1()函数 */

 int main()
 {
   DuLinkList L;
   int i,n;
   Status j;
   ElemType e;
   InitList(&L);
   for(i=1;i<=5;i++)
     ListInsert(L,i,i); /* 在第i个结点之前插入i */
   printf("正序输出链表:");
   ListTraverse(L,print); /* 正序输出 */
   printf("逆序输出链表:");
   ListTraverseBack(L,print); /* 逆序输出 */
   n=2;
   ListDelete(L,n,&e); /* 删除并释放第n个结点 */
   printf("删除第%d个结点,值为%d,其余结点为:",n,e);
   ListTraverse(L,print); /* 正序输出 */
   printf("链表的元素个数为%d\n",ListLength(L));
   printf("链表是否空:%d(1:是 0:否)\n",ListEmpty(L));
   ClearList(L); /* 清空链表 */
   printf("清空后,链表是否空:%d(1:是 0:否)\n",ListEmpty(L));
   for(i=1;i<=5;i++)
     ListInsert(L,i,i); /* 重新插入5个结点 */
   ListTraverse(L,print); /* 正序输出 */
   n=3;
   j=GetElem(L,n,&e); /* 将链表的第n个元素赋值给e */
   if(j)
     printf("链表的第%d个元素值为%d\n",n,e);
   else
     printf("不存在第%d个元素\n",n);
   n=4;
   i=LocateElem(L,n,equal);
   if(i)
     printf("等于%d的元素是第%d个\n",n,i);
   else
     printf("没有等于%d的元素\n",n);
   j=PriorElem(L,n,&e);
   if(j)
     printf("%d的前驱是%d\n",n,e);
   else
     printf("不存在%d的前驱\n",n);
   j=NextElem(L,n,&e);
   if(j)
     printf("%d的后继是%d\n",n,e);
   else
     printf("不存在%d的后继\n",n);
   DestroyList(&L);
 }

 

 

运行:

以下是代码实现: c1.h: ```c typedef struct LNode { Complex data; struct LNode *next; } LNode, *LinkList; ``` c2-2.h: ```c void CreateList(LinkList *L, int n); void SortList(LinkList L); void PrintList(LinkList L); ``` bo2-2.c: ```c #include <stdio.h> #include <stdlib.h> #include "c1.h" #include "c2-2.h" void CreateList(LinkList *L, int n) { *L = (LinkList) malloc(sizeof(LNode)); (*L)->next = NULL; LinkList p = *L; for (int i = 0; i < n; i++) { LinkList q = (LinkList) malloc(sizeof(LNode)); scanf("%lf%lf", &q->data.real, &q->data.imag); q->next = NULL; p->next = q; p = q; } } void SortList(LinkList L) { int len = 0; for (LinkList p = L->next; p != NULL; p = p->next) { len++; } for (int i = 0; i < len - 1; i++) { LinkList p = L->next; for (int j = 0; j < len - 1 - i; j++) { if (p->data.real * p->data.real + p->data.imag * p->data.imag > p->next->data.real * p->next->data.real + p->next->data.imag * p->next->data.imag) { Complex tmp = p->data; p->data = p->next->data; p->next->data = tmp; } p = p->next; } } } void PrintList(LinkList L) { for (LinkList p = L->next; p != NULL; p = p->next) { printf("%.2lf+%.2lfi ", p->data.real, p->data.imag); } printf("\n"); } ``` main2-2.c: ```c #include <stdio.h> #include "c1.h" #include "c2-2.h" int main() { LinkList L; int n; printf("请输入复数个数:"); scanf("%d", &n); CreateList(&L, n); SortList(L); printf("按模从小到大排列的复数为:"); PrintList(L); return 0; } ``` 输入样例: ``` 请输入复数个数:3 1 2 -3 4 5 -6 ``` 输出样例: ``` 按模从小到大排列的复数为:1.00+2.00i -3.00+4.00i 5.00-6.00i ``` 希望能够帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值