2024/11/11日工作總結

张黎健發表於2024-11-11

完成資料結構pta實驗題:
6-3 連結串列逆置:
本題要求實現一個函式,將給定單向連結串列逆置,即表頭置為表尾,表尾置為表頭。連結串列結點定義如下:

struct ListNode {
int data;
struct ListNode *next;
};
函式介面定義:
struct ListNode *reverse( struct ListNode *head );
其中head是使用者傳入的連結串列的頭指標;函式reverse將連結串列head逆置,並返回結果連結串列的頭指標。

裁判測試程式樣例:
include <stdio.h>
include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode createlist(); /裁判實現,細節不表*/
struct ListNode *reverse( struct ListNode *head );
void printlist( struct ListNode *head )
{
struct ListNode *p = head;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *head;

head = createlist();
head = reverse(head);
printlist(head);

return 0;

}

/* 你的程式碼將被嵌在這裡 */
輸入樣例:
1 2 3 4 5 6 -1
輸出樣例:
6 5 4 3 2 1

點選檢視程式碼
struct ListNode *reverse(struct ListNode *head){
    struct ListNode *pre=NULL;
    struct ListNode *now=head;
    struct ListNode *hou=NULL;
    while(now!=NULL){
        hou=now->next;
        now->next=pre;
        pre=now;
        now=hou;
    }
    head=pre;
    return head;
}

7-1 線性表A,B順序儲存合併:
有兩張非遞增有序的線性表A,B,採用順序儲存結構,兩張表合併用c表存,要求C為非遞減有序的,然後刪除C表中值相同的多餘元素。元素型別為整型

輸入格式:
第一行輸入輸入表A的各個元素,以-1結束,中間用空格分隔;第二行輸入表B的各個元素,以-1結束,中間用空格分隔。

輸出格式:
輸出結果為表C的非遞減有序序列,中間用英文逗號分隔

輸入樣例:
在這裡給出一組輸入。例如:

9 8 7 -1
10 9 8 4 3 -1
輸出樣例:
在這裡給出相應的輸出。例如:

3,4,7,8,9,10

點選檢視程式碼
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main(){
    vector<int> A,B,C;
    int num;
    while(cin>>num&&num!= -1){
        A.push_back(num);
    }
    while(cin>>num&&num!= -1){
        B.push_back(num);
    }
    size_t a=A.size();
    size_t b=B.size();
    size_t i=0,j=0;
    while(i<a&&j<b){
        if(A[i]>B[j]){
            if(A[i]!=A[i-1]){
                C.push_back(A[i]);
            }
            i++;
        }
        else if(A[i]==B[j]){
            if(A[i]!=A[i-1]&&B[j]!=B[j-1]){
                C.push_back(A[i]);
            }
            i++;
            j++;
        }
        else if(A[i]<B[j]){
            if(B[j]!=B[j-1]){
                C.push_back(B[j]);
            }
            j++;
        }
    }
    if(i==a){
        for(size_t k = j;k<b;k++){
            if(B[k]!=B[k-1])
                C.push_back(B[k]);
        }
    }
    if(j==b){
        for(size_t l = i;l<a;l++){

                C.push_back(A[l]);
        }
    }
    sort(C.begin(),C.end());
    for(size_t c = 0;c < C.size();c++){
        cout<<C[c];
        if(c < C.size() - 1)
            cout<<",";
    }
    return 0;
}