第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)除了第一个数据元素外,其它的数据元素都有一个前驱。除了最后一个数据元素外,其它的数据元素都有一个后继。
posted @ 2018-03-24 21:00  颜骏棋  阅读(148)  评论(1编辑  收藏  举报