第02次作业-线性表
1.题目名称
顺序表7-1 最长连续递增子序列
单链表6-2 单链表逆置
有序表7-1 两个有序链表序列的合并
2.设计思路
顺序表7-1 将每个数分别定义一个相应数组,然后统计其中连续且比它大的数字数量
单链表6-2 运用头插法将后面的数字前移
有序表7-1 将两个链表通过比较然后排列至新的链表
3.代码截图
7-1
#include <iostream> #define maxsize 100000 typedef int ElementType; typedef int Postion; using namespace std; typedef struct{ ElementType data[maxsize]; Postion length; }SqList; typedef SqList *List; void CreateSqList(List &L,ElementType a[],ElementType n); //创建顺序表 void findSqList(List &L,ElementType p,ElementType s);//查找最大序列 void DestroyList(List &L){ delete L; } int main(){ int i,n,p,s; int a[maxsize]; List L; cin>>n; for(i=0;i<n;i++){ cin>>a[i]; } CreateSqList(L,a,n); findSqList(L,p,s); DestroyList(L); } void CreateSqList(List &L,ElementType a[],ElementType n){ L=new SqList; L->length=n; for(int i=0;i<n;i++){ L->data[i]=a[i]; } } void findSqList(List &L,ElementType p,ElementType s){ int num[maxsize]={0},i,j,temp,maxD; for(i=0;i<L->length;i++){ temp=i; for(j=i+1;j<L->length;j++){ if(L->data[temp]<L->data[j]) { num[i]++; temp=j; } else break; } } maxD=-1; temp=0; for(i=0;i<L->length;i++){ if(maxD<num[i]){ maxD=num[i]; temp=i; } } p=temp; s=maxD; for(i=p;i<p+s;i++){ cout<<L->data[i]<<" "; } cout<<L->data[p+s]; }
6-2
void CreateList(List &L,int n){ List p,t,s; L=new struct node; L->next=NULL; s=L; int a; while(n--) { cin>>a; p=new struct node; p->data=a; p->next=s->next; s->next=p; s=p; } t=L; L=L->next; delete t; } void ReverseList(List &L){ List q,t=NULL; while(L!=NULL){ q = L; L = L->next; q->next = t; t = q; } L=t; } void PrintList(List L){ if(!L)printf("NULL"); else{ while(L->next){ cout<<L->data<<" "; L=L->next; } cout<<L->data; } }
7-1
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct LNode //定义单链表结点类型 { ElemType data; struct LNode *next; } Node,*LinkList; void InitList(LinkList &L); void CreateListR(LinkList &L); void paixu(LinkList L1,LinkList L2,LinkList &L); void DispList(LinkList L); int main() { LinkList L1,L2,L; InitList(L1); InitList(L2); InitList(L); CreateListR(L1); CreateListR(L2); paixu(L1,L2,L); DispList(L); return 0; } void InitList(LinkList &L){ L= (LinkList)malloc(sizeof(LNode)); L->next=NULL; } void CreateListR(LinkList &L){ LinkList r,s; int num; s=L; do{ scanf("%d",&num); r=(LinkList)malloc(sizeof(LNode)); if(num>=0) r->data=num; else break; r->next=NULL; s->next=r; s=r; }while(num>=0); } void paixu(LinkList L1,LinkList L2,LinkList &L){ int i; LinkList La,Lb,Lc; La=L1->next; Lb=L2->next; Lc=L; while(La&&Lb){ if(La->data>Lb->data){ Lc->next=Lb; Lc=Lb; Lb=Lb->next; i=2; } else{ Lc->next=La; Lc=La; La=La->next; i=1; } } if(i=1) Lc->next=Lb; else Lc->next=La; } void DispList(LinkList L){ LinkList p=L->next; if(!p) printf("NULL"); else{ while(p->next){ printf("%d ",p->data); p=p->next; } printf("%d",p->data); } }
4.PTA提交列表说明
7-1
6-2
7-1
1.顺序表PTA排名
2.链表PTA排名
三、本周学习总结
1.谈谈你本周数据结构学习时间是如何安排,对自己安排满意么,若不满意,打算做什么改变?
平时周末空闲进行学习,对自己安排感觉一般,将增加时间学习
2.谈谈你对线性表的认识?
线性表是n(n为0时为空表)个数据元素的有限集合,他的特点是:
(1)存在唯一的一个被叫做“第一个”的数据元素,存在唯一的一个被叫做“最后一个”的数据元素。
(2)除了第一个数据元素外,其它的数据元素都有一个前驱。除了最后一个数据元素外,其它的数据元素都有一个后继。