给你写了个C++的,应该算是很拉风了,用了动态数组和优先队列实现的最小堆,好喜欢这个程序啊,呜哈哈#include#includeusingnamespacestd;voidprintpriority_queue,greater>&q,size_tsize{forsize_ti=0;i,greater>evenList,oddList;cin>>num;nums=int*callocnum,sizeofint;forinti=0;i>nums,i++;cout<
黄皓翔2019-12-21 18:57:27
哈哈碰巧也是返回来学数据结构,让后自己看着书一个一个去实现,下面的代码绝对是我一个代码一个代码打上去得,,带头结点的哦!!ListLink.c文件:StatusinitListLinkList*L{//初始化表LinkListhead;head=LinkListmallocsizeofLnode;ifNULL==headexitOVERFLOW;head->next=NULL;*L=head;returnOK;}StatuslistEmptyLinkListL{//判断是否为空表ifNULL==L->nextreturnTRUE;returnFALSE;}StatuslistLengLinkListL,int*l{//返回表长LinkListLink;inti=0;Link=L->next;ifLink==NULL{*l=i;returnOK;}while1{Link=Link->next;i++;ifLink==NULLbreak;}*l=i;returnOK;}StatusClearListLinkList*L{//将线性链表L重置为空表,释放原链表结点空间,注意算法LinkListq,p;q=p=*L;ifp->next==NULLreturnOK;p=q->next;q->next=NULL;whilep!=NULL{q=p;p=p->next;freeq;}returnOK;}StatusDestroyListLinkList*L{//销毁一个链表ClearListL;free*L;returnOK;}StatusAppendLinkList*L,Lnode*s{//增加一个节点LinkListlink;link=*L->next;iflink==NULL{*L->next=s;returnOK;}whileNULL!=link->next{link=link->next;}link->next=s;returnOK;}StatusPriorPosLinkListL,ElemTypee,LinkList*ln{//返回直接前驱LinkListlink;link=L->next;iflink==NULLreturnERROR;while1{ife==link->next->data{*ln=link;returnOK;}iflink->next==NULLreturnERROR;link=link->next;}}StatusRemoveLinkList*L,LinkList*q{//删除最后一个节点并返回它LinkListlink;link=*L->next;iflink==NULLreturnERROR;whilelink->next->next!=NULL{link=link->next;}*q=link->next;link->next=NULL;returnOK;}StatusInsBeforeLinkList*L,LinkListp,Lnodes//将s结点插入在p所指结点之前,并修改指针p指向新插入的结点{LinkListlink;link=*L;whilelink->next{iflink->next==p{s.next=p;*link->next=s;*p=s;returnOK;}link=link->next;}returnERROR;}StatusInsAfterLinkList*L,LinkListp,Lnodes//将s所指结点插入在p所指结点之后并修改指针p指向新插入的结点{LinkListlink;link=*L;whilelink{iflink->next==p{ifp->next==NULL{*p->next=s;*p=s;returnOK;}s.next=p->next;*p->next=s;*p=s;returnOK;}link=link->next;}returnERROR;}StatusLocateListLinkListL,inti,Lnode*p//用p返回线性链表L中第i个结点的位置{LinkListlink;intj=1;link=L;ifinext;ifj==i{p=link;returnOK;}iflink->next==NULLreturnERROR;j++;}}StatusLocateElemLinkListL,ElemTypee,int*i//回线性链表L中第1个data为e的元素的位置{intj=1;LinkListlink;link=L->next;while1{iflink->data==e{*i=j;returnOK;}iflink->next==NULLreturnERROR;j++;}}StatusListOutLinkListL//输出每个元素{LinkListlink;link=L->next;iflink==NULL{printf"此为空表.";return0;}whilelink!=NULL{printf"%4d",link->data;link=link->next;}printf"";returnOK;}宏定义文件和以下引用头文件和结构体定义文件:addhead.h:#include#include#include//注意exit#include#include//INT_MAX等#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefintElemType;typedefstructnode{ElemTypedata;structnode*next;}Lnode,*LinkList;最后就是main文件啦:main.c#include"addhead.h"#include"LinkList.c"voidmainvoid{LinkListL=NULL;inte_tmp=3;inti=0;intnum=0;Lnode*ln->next=NULL;}fori=0;idata;}printf"";printf"将节点添加到L中:";fori=0;idata;ListOutL;ifRemove&L,&lnodeprintf"删除成功,删除的节点数据域%d",lnode->data;ListOutL;iflistLengL,&numprintf"表的长度%d",num;ifClearList&Lprintf"表清空成功!";iflistLengL,&numprintf"清空后表的长度%d",num;ifDestroyList&Lprintf"销毁成功!";getchar;。
龙宪连2019-12-21 18:41:21