第二次作業-線性表


一、PTA實驗作業

本周要求挑3道題目寫設計思路、調試過程。設計思路用偽代碼描述。題目選做要求:

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

題目:

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

 

 

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

設計思路:

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

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;

代碼截圖

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提交結果

 

 

二、截圖本周題目集的PTA最后排名

 1、順序表PTA排名

 

 2、鏈表PTA排名

3. 我的總分:215分

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

 

 

三、本周學習總結

1、談談你本周數據結構學習時間是如何安排,對自己安排滿意么,若不滿意,打算做什么改變?

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

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

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

 3、代碼Git提交記錄截圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM