第二次做業-線性表

1、PTA實驗做業c++

本週要求挑3道題目寫設計思路、調試過程。設計思路用僞代碼描述。題目選作要求:數組

  • 順序表選擇一題(6-2,6-3,7-1選一題),代碼必須用順序結構抽象數據類型封裝
  • 單鏈表選擇一題(6-1不能選)
  • 有序表選擇一題

題目:數據結構

6-2 線性表元素的區間刪除(20 分)

 

 

給定一個順序存儲的線性表,請設計一個函數刪除全部值大於min並且小於max的元素。刪除後表中剩餘元素保持順序存儲,而且相對位置不能改變。函數

設計思路:學習

int i,j=0,c=0;i j用於計數,c爲統計被刪除的個數spa

for(i=0;i<=L->Last;i++){
if(L->Data[i]>minD&&L->Data[i]<maxD){判斷符合刪除條件的個數
c++;須要被刪除的數加一
}
else{
L->Data[j]=L->Data[i];不知足刪除條件的存入 重新的下標開始儲存
j++;
}
}
L->Last=L->Last-c;數組長度減去刪除個數
return L;設計

代碼截圖3d

PTA提交說明:指針

 

6-2 jmu-ds-單鏈表逆置(25 分)

本題要求實現一個函數,將給定單向鏈表逆置,即表頭置爲表尾,表尾置爲表頭。鏈表爲帶頭結點鏈表。鏈表結點定義以下:調試

 

設計思路:

void CreateList(List &L,int n)
{
ListNode *s,*r;
int x;x爲輸入的數
L=(ListNode*)malloc(sizeof(ListNode));L做爲頭指針
r=L;
for(i=0;i<n;i++)
{
s=(ListNode*)malloc(sizeof(ListNode));
scanf("%d",&x);
s->data=x;使用尾插法建立鏈表
r->next=s;
r=s;
}
r->next=NULL;r最後指向空
}
void ReverseList(List &L)
{
ListNode *p,*q;定義兩個鏈表
p=L->next;
L->next=NULL;
while(p!=NULL) 不爲空時逆置
{
q=p;
p=p->next;使用尾插法倒置鏈表
q->next=L->next;
L->next=q;
}
}
void PrintList(List L)
{
ListNode*p=L->next;
if(p!=NULL)
{
printf("%d",p->data);知足格式要求輸出
p=p->next;
while(p!=NULL)
{
printf(" %d",p->data);知足格式輸出
p=p->next;
}
}
else
printf("NULL");
}

 代碼截圖:

PTA提交說明:錯誤部分:小細節沒有注意到,具體我也不記得了。

 

7-1 兩個有序鏈表序列的合併(20 分)

已知兩個非降序鏈表序列S1與S2,設計函數構造出S1與S2的並集新非降序鏈表S3。

 

設計思路:

定義結構 與結構成員data next
typedef struct Node*List;
struct Node{
int data;
struct Node*next;
};
int main()
{
定義三個鏈表l1,l2,l3;
l1=intList();
l2=intList();
l3=intList();初始化
並輸入鏈表再混合鏈表
print(l3);輸出混合鏈表
return 0;
}
List intList()
{
List L;
L=(List)malloc(sizeof(struct Node));給其分配空間
return L;
}
void print(List l)
{
l=l->next;
if(l==NULL)
{
printf("NULL");
return ;
}
while(l)
{
if(l->next!=NULL)
printf("%d ",l->data);
else
printf("%d",l->data);
l=l->next;
}

}
void read(List l)
{
List X;
int a;
scanf("%d",&a);
while(a>0)輸入小於0時中止輸入
{
X=(List)malloc(sizeof(struct Node));X申請空間
if(!X)return ;
X->data=a;
//尾插法輸入數字
l->next=X;
l=X;
scanf("%d",&a);
}
l->next=NULL;指針最後指向空
return ;

}
void combine(List l1,List l2,List l3)
{
l1=l1->next;
l2=l2->next;
while(l1!=NULL&&l2!=NULL)按小到大順序排列
{
if(l1->data>l2->data)
{
l3->next=l2;//小的先存入l3
l2=l2->next;下一位
}
else
{
l3->next=l1;另外一個接着存入
l1=l1->next;
}
l3=l3->next;
}
if(l1==NULL&&l2==NULL)
return ;
if(l1!=NULL)
l3->next=l1;//若是l2爲空,l3指向l1
else
l3->next=l2;反過來

}

代碼截圖:

PTA提交結果

 

 

2、截圖本週題目集的PTA最後排名

 一、順序表PTA排名

 

 二、鏈表PTA排名

3. 個人總分:215分

PTA總分在200--250分:2分

 

 

3、本週學習總結

一、談談你本週數據結構學習時間是如何安排,對本身安排滿意麼,若不滿意,打算作什麼改變?

 答: 本週的數據結構課程的預習都是提早一天看半小時書而後抽一點時間寫課堂派,感受時間不太夠用,而後打pta的時候也沒有太多思路,經常要去看書和問同窗,我打算多看書,記住並理解基礎的代碼而後抽出更多時間打pta

二、談談你對線性表的認識

線性表是數據結構中很基礎一種,其中各元素的相對位置都是線性的,除了第一位和最後一位,其中的元素都有前一位和後一位但都惟一。而且線性表能比較好的完成插入和刪除操做

 三、代碼Git提交記錄截圖

相關文章
相關標籤/搜索