完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
//注意:该文件操作的单链表为带头结点单链表,头结点数据无效
#include #include #include <time.h> #define OK 1 #define ERROR 0 typedef int data_t; typedef struct Node { data_t data; struct Node *next; }Node; typedef struct Node *LinkList; int GetElem(LinkList L,int i,data_t *data)//读取单链表的第i个元素 { int j; LinkList p;//工作指针 p = L->next; j = 1; while(p && j { p = p->next;//让p指向下一个节点 j++; } if(!p) { printf("%d position errorn",i); return ERROR; } *data = p->data; return OK; } int ListInsert(LinkList L,int i,data_t e)//插入新节点,使其成为第i个节点 { int j; LinkList p,s; p=L; j=1; while(p && j { p=p->next; j++; } if(!p)//p为NULL { printf("%d position errorn",i); return ERROR; } //若if没有执行则证明位置有效,可以插入数据 s=(LinkList)malloc(sizeof(Node)); s->data=e; s->next=p->next; p->next=s; return OK; } int ListDelete(LinkList L,int i,data_t *e)//删除第i个位置节点,数据由e获得 { int j; LinkList p,q; if(L->next==NULL) { printf("LinkList is Empty!n"); return ERROR; } p=L; j=1; while(p->next && j { p=p->next; j++; } if(!(p->next)) { printf("%d position errorn",i); return ERROR; } q=p->next; p->next=q->next; *e=q->data; free(q); return OK; } LinkList CreateEmptyLinklist()//创建一个空表,空表只有头结点 { LinkList p; p = (LinkList)malloc(sizeof(Node)); if(p==NULL) { perror("CreateEmptyLinkList error"); exit(0); } //p->data=-255;//表示无效数据 p->next=NULL; return p; } LinkList CreateListHead(LinkList L,int n)//创建链表(头插法) { LinkList p; int i; srand(time(NULL));//初始化随机数种子 for(i=0;i p = (LinkList)malloc(sizeof(Node)); p->data = rand()%100+1; p->next = L->next; L->next = p; } return L; } LinkList CreateListTail(LinkList L,int n)//创建链表(尾插法) { LinkList p,r; int i; srand(time(NULL)); r = L; for(i=0;i p = (LinkList)malloc(sizeof(Node)); p->data = rand()%100+1; r->next = p; r = p; } r->next = NULL;//链表封尾 return L; } int ClearList(LinkList L)//清空链表 { LinkList p,q; p=L->next; while(p) { q=p->next; free(p); p=q; } L->next=NULL; return OK; } int PrintList(LinkList L)//遍历打印整个链表 { LinkList p=L->next; while(p) { printf("%dt",p->data); p=p->next; } printf("n"); return OK; } int ListReverse(LinkList L)//练习1:单链表反序 { LinkList p,q; p=L->next; L->next=NULL; while(p!=NULL) { q=p; p=p->next; q->next=L->next; L->next=q; } return OK; } LinkList Adjmax(LinkList h)//练习2:寻找最大元素对 { LinkList p, p1, q; int m0, m1; p = h->next; p1 = p; if(p1 == NULL) return p1; //表空返回 q = p->next; if(q == NULL) return p1; //表长=1时的返回 m0 = p->data + q->data; //相邻两结点data值之和 while (q->next!=NULL) { p = q; q = q->next; //取下一对相邻结点的指针 m1 = p->data + q->data; if(m1 > m0) { p1 = p; m0 = m1; } }//取和为最大的第一结点指针 return p1; } int main() { /* LinkList head1,head2; int i; data_t data=12; head1=CreateEmptyLinklist(); head2=CreateEmptyLinklist(); printf("head1n"); head1=CreateListHead(head1,15); PrintList(head1); printf("head2n"); head2=CreateListTail(head2,15); PrintList(head2); scanf("%d",&i); printf("Insert head1 %d position, data is %dn",i,data); ListInsert(head1,i,data); PrintList(head1); scanf("%d",&i); ListDelete(head1,i,&data); printf("Delete head1 %d position, data is %dn",i,data); PrintList(head1); LinkList adjmax = Adjmax(head1); printf("Adjmax data is %d, Adjmax data next data is %dn",adjmax->data,adjmax->next->data); ListReverse(head1); printf("Reserve head1:n"); PrintList(head1); if(ClearList(head1)==OK) { printf("head1 Clear successn"); } if(ClearList(head2)==OK) { printf("head2 Clear successn"); } */ return 0; } |
|
相关推荐
2个回答
|
|
感谢分享
|
|
|
|
慢慢消化吧!!!
|
|
|
|
只有小组成员才能发言,加入小组>>
请问下图大疆lightbridge2遥控器主板电源芯片型号是什么?
4468 浏览 1 评论
使用常见的二极管、三极管和mos做MCU和模组的电平转换电路,但是模组和MCU无法正常通信,为什么?
345浏览 2评论
为了提高USIM卡电路的可靠性和稳定性,在电路设计中须注意的点有哪些?
348浏览 2评论
372浏览 2评论
366浏览 2评论
413浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 15:29 , Processed in 0.990581 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号