一、设计思路
(1)数据的存储结构是链表,最后一个结点的next指向第一个元素的结点;
(2)数据个数为n,则最多有n*(n+(n-1)+...+1)种情况(包括重复);
(3)剩下的部分与二维数组的差不多。
二、源代码
1 // 一维数组.cpp : Defines the entry point for the console application. 2 // 袁佩佩 于海洋 3 4 #include "stdafx.h" 5 #include6 #define num 5 7 /*链表数据结构*/ 8 typedef struct LNode 9 {10 int data;11 struct LNode *next;12 }LNode,*LinkList;13 /*链表的初始化*/14 void InitList(LinkList &L)15 {16 L=new LNode;17 L->next=NULL;18 }19 /*链表数据的插入*/20 void InsertList(LinkList &L)//建立循环链表21 {22 LNode *head,*temp;23 head=L;24 cout<<"请输入"< <<"个数字:";25 for(int i=0;i >temp->data;29 temp->next=NULL;30 head->next=temp;31 head=head->next;32 }33 head->next=L->next; //首尾相连,建立循环链表34 }35 void output(LinkList L)36 {37 for(int i=0;i next->data<<" ";40 L=L->next;41 }42 }43 int main( )44 {45 int max,sum,flag=0; //sum是字数组的和,max是最大的子数组的和46 int ordern=0,orderx=0;47 LinkList L;48 LNode *temp,*temp1,*temp2,*head;49 InitList(L);50 InsertList(L); //由用户往链表中插入数据51 temp=L->next;52 max=L->next->data; //max初值是链表中第一个数53 for(int i=0;i next)54 {55 temp2=temp;56 for(int j=0;j next)57 {58 for(int k=j;k next)63 {64 sum=sum+temp1->data;65 }66 if(max next;78 cout<<"最大字数组是:";79 for(i=0;i<(flag+ordern);i++) //找出取得最大值的时候的子数组的第一个数80 {81 temp=temp->next;82 }83 for(int j=0;j<(orderx-ordern+1);j++,temp=temp->next)//将取得最大和的子数组元素输出84 {85 cout< data<<" ";86 }87 cout< <<"最大子数组的和是:"< <
三、运行截图
四、心得体会
这次最大的感受就是,我们两个都有各自的思路想法,都想向对方阐述自己的想法,导致无法很好地接受倾听对方的声音。我觉得他的方法浪费内存空间,他认为他的查找过程清晰明了。最终还是于海洋同学妥协了,采用的是我的思路,用循环链表。开发过程还是像上两次差不多,个人有个人的优缺点,可以相互弥补。调试程序时,也是我俩共同协作排查出了错误。
五、无图无真相