编辑程序完成单链表的如下操作1初始化单链表2输入N个数,穿件一个单链表3访问整个链表4逆置和再访问

边宝刚 2019-12-21 18:28:00

推荐回答

链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:1带头节点。对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为NULL,这时链表为空。2不带头结点。不带头结点的情况,链表的起始节点是可能变化的,但无论如何变化,必须有一个节点指针类型的变量保存实际上的第一个节点first。当first为空时,链表即为空。这时判断为空的条件为first==NULL。
边可君2019-12-21 19:14:26

提示您:回答为网友贡献,仅供参考。

其他回答

  • #include#includetypedefstructNode{intdata;structNode*pNext;}NODE,*PNODE;PNODEcreat_node;voiddisp_nodePNODE;boolinsert_nodePNODE,int,int;booldelete_nodePNODE,int,int*;boolfind_nodePNODE,int,int*;boolempty_nodePNODE;boolinversion_nodePNODE;intmainvoid//主函数{intvale;PNODEpHead;pHead=creat_node;disp_nodepHead;insert_nodepHead,4,10;//在第四个节点位置插入值为10的节点disp_nodepHead;delete_nodepHead,3,&vale;//删除第三个节点disp_nodepHead;find_nodepHead,5,&vale;inversion_nodepHead;return0;}PNODEcreat_node//按要求建立单链表的{inti;intnum;PNODEpHead;pHead=PNODEmallocsizeofNODE;ifpHead==NULL{printf"动态内存分配失败!";exit-1;}PNODEpTail;pTail=pHead;pTail->pNext=NULL;PNODEpNew;printf"请输入你要创建链表元素的个数:";scanf"%d",#fori=0;idata;pTail->pNext=pNew;pNew->pNext=NULL;pTail=pNew;}printf"";returnpHead;}voiddisp_nodePNODEpHead//显示每个节点的内容{PNODEp;p=pHead;whilep->pNext!=NULL{p=p->pNext;printf"%4d",p->data;}printf"";return;}boolinsert_nodePNODEpHead,intpos,intvale//插入节点{PNODEp;p=pHead;inti=0;whilep!=NULL&&ipNext;++i;}ifp==NULL||idata=vale;pNew->pNext=p->pNext;p->pNext=pNew;printf"";returntrue;}booldelete_nodePNODEpHead,intpos,int*vale//删除节点,pos表示删除节点的位置,vale表示删除的值{inti=0;PNODEp;p=pHead;whilep->pNext!=NULL&&ipNext;++i;}ifp->pNext==NULL||ipNext;*vale=r->data;p->pNext=r->pNext;freer;returntrue;}boolempty_nodePNODEpHead//判断链表是否为空{ifpHead->pNext==NULL{returntrue;}returnfalse;}boolfind_nodePNODEpHead,intpos,int*vale//按要求查找链表中的节点值{inti=0;PNODEp;p=pHead;whilep->pNext!=NULL&&ipNext;++i;}ifp->pNext==NULL||ipNext->data;returntrue;。
    齐新红2019-12-21 19:38:50
  • 给你写了个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

相关问答