1、若数据域是英文字母或是其它字符,则将其从原来的链表中删除,并把它分别插入到其它两个链表中。4.建立一个循环链表,链表的数据域为商品的价格和数量,最后插入(4000,10)节点。从前到后遍历这个链表,若链表中存在一个节点,其数据域的价格为4000,则数量再加上10即可,若不存在,按照链表的顺序将该节点插入。5.建立一个顺序表,从键盘上输入字符串,从第一个节点和最后一个节点依次向中间比较。若发现不同。则比较结束,该字符串不是回文,否则,是回文。6.叶子节点的左右孩子节点的数据域均为0.用先序遍历的方法遍历该链表,每遍历到一个节点,就将节点数加1,若节点的左右孩子节点的数据域为0,则叶子节点数加1.
2、四、调试分析1.在调试过程中,要充分考虑到各种可能出现的情况。比如说,当有多个最小值时,需要依次与其后的节点进行操作;再如,到最小值在最后一个节点时,就不能进行任何处理了。时间复杂度:O(n)。2.好像没有遇到什么问题。3.此处要注意结束条件,否则可能没法正常退出。4.本题需要注意,链表中是否有数据域为4000的节点,有的话就不用再新建了。5.本题好像也没有遇到什么问题。6.本题要注意,叶子节点的定义。否则,程序无法判断节点是否为叶子节点。五、测试结果1.2.3.4.5.6. 六、源程序:#includestdlib.htypedefint datatype;typedefstruct nod
3、e datatype data; struct node *next;linklist;linklist *head,*p;linklist *creatlistr1(); /*尾插法*/void Delete(linklist *p,linklist *head);linklist *locate(linklist *head,datatype key);void output(linklist *p);int main() int Min; linklist *pMin=(linklist *)malloc(sizeof(linklist); printf(请输入单链表,并以-1结束:n)
4、; head=creatlistr1(); Min=head-next-data; p=head-next; while (p!=NULL) if (Minp-data) Min=p- pMin=p; p=p- 最小值为:%dn,Min); p=head; while (p=locate(p,Min)! if(p-next! if (Min%2) (p-data)=(p-data)=p- else Delete(p-next,head); 变更后的链表为: output(head); return 0;linklist *creatlistr1() /*尾插法*/ int ch; linkli
5、st *head,*s,*r; head=(linklist*)malloc(sizeof(linklist); r=head; scanf(%d,&ch); while(ch!=-1) s=(linklist*)malloc(sizeof(linklist); s-data=ch; r-next=s; r=s; scanf( r-next=NULL; return head;void output(linklist *ll) linklist *p; for(p=ll-p!=NULL;p=p-next) printf(%d ,p-data);void Delete(linklist *p,l
6、inklist *head) linklist *q=head; while (q-=p) q=q- q-next=p- free(p);linklist *locate(linklist *head,datatype key) linklist *p=head- while(p!data!=key) p=p- elsebreak; return p;linklist *head;linklist *reverse1(linklist *head); int i; head=(linklist *)malloc(sizeof(linklist); linklist *s,*r; for (i=
7、0;idata=x; p-linklist *reverse1(linklist *head) linklist *p,*q; while(p- q=p- p-next=q- q-next=head- head-next=q;ctype.hlinklist *head,*head2,*head3,*p,*p2,*p3;linklist *Delete(linklist *p,linklist *head);请输入链表,并以$结束: head2=(linklist *)malloc(sizeof(linklist); head2- head3=(linklist *)malloc(sizeof(
8、linklist); head3- p2=head2; p3=head3; if (isdigit(p-data) continue; if (isalpha(p- p2-next=Delete(p,head); p2=p2- p3- p3=p3- output(head2); output(head3); char ch; ch=getchar();=) ch=getchar();%clinklist *Delete(linklist *p,linklist *head) datatype price; datatype mount;void insert(linklist*head,dat
9、atype price,datatype mount);void output(linklist *head);请按价格从高到低的次序依次输入电视机的价格和数量,格式:“价格数量”,两组数据之间用空格分开,最后以“0 0”结束: insert(head,4000,10);%d%dprice,&mount); while(!(price=0 & mount=0)price=price;mount=mount;next=head;=head;%d %dnprice,p-void insert(linklist*head,datatype price,datatype mount) linklist
10、 *s,*p=head-next,*q=head; s=(linklist *)malloc(sizeof(linklist);=head,p-price4000) if (p-price=4000)mount+=10; elsestring.h#define Maxnum 1024 char strMaxnum=0; int i,j,flag=1;%s,str); j=strlen(str)-1;j;i+,j-) if (stri!=strj) flag=0; break; if (flag)是回文n不是回文n6.typedefstruct Nodestruct Node *lchild,*
11、rchild; Node,*pNode;int CreateTree(pNode &T) datatype e;e);if(e=0) T=NULL;else T=(pNode)malloc(sizeof(Node);if(! exit(-2); T-data =e; CreateTree(T-lchild );rchild );return 1;int CountNode(pNode T)int m=0,n=0;if(T=NULL)return 0; m=CountNode(T- n=CountNode(T-return (m+n+1);void leafcount(pNode p,int *count)if(p=NULL) return;if(p-lchild=NULL &rchild=NULL) (*count)+;return; leafcount(p-lchild,count);rchild,count); pNode T;int res=0;请用前序遍历的顺序建立二叉树,叶子节点的左右子树以0结束: CreateTree(T);节点数为:,CountNode(T); leafcount(T,&res);叶子节点数目为:,res);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1