日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构之SWUSTOJ1038: 顺序表中重复数据的删除

發布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构之SWUSTOJ1038: 顺序表中重复数据的删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

?

思路:

這個題目相對來說主要思路在于SLPop這個函數的設計上。

如果找到了等于m的數,那么需要分情況來討論:

第一種情況就是普通情況,也就是在中間找到等于m的數,那么之需要把每個數依次向前挪動一個位置即可,并且這是的size要減少一個。

第二種情況就是在末尾的時候找到等于m的數,這時就不能夠再去把后面的數移動在前面來,因為這樣就會造成數組訪問越界,只需要把size較少一個即可。

還需要注意的一個問題:

當每一次找到等于m的數時,我們都完成了后數的移動到前面的過程,那么這時我們需要用continue來跳過后面的i++這一步,因為還得繼續判定后面移到這個位置上面來的數是否等于m,如果不等于那么直接i++即可。

代碼:

#include<stdio.h> #include<stdlib.h> #define N 100 typedef struct SList {int data[N];int size; }SL; void SLInit(SL* ps) {ps = (SL*)malloc(sizeof(SL));ps->size = 0; } void SLCreate(SL* ps, int n) {int x = 0;ps->size = n;for (int i = 0; i < ps->size; i++){scanf("%d", &x);getchar();ps->data[i] = x;} } void SLPop(SL* ps, int m) {int i = 0;while (i < ps->size){if (ps->data[i] == m){if (ps->size == i){ps->size--;}//這里主要是處理當最后一個數等于m時else{int j = i;while (j + 1 < ps->size){ps->data[j] = ps->data[j + 1];j++;}ps->size--;}continue;//如果等于m時處理完過后,將后面的數依次向前移動一個位置//跳出本次循環,主要是為了不讓i完后移動//因為不確定從后面移動過來的數是否等于m}i++;//i不斷向后迭代} } void SLPrint(SL* ps) {for (int i = 0; i < ps->size; i++){printf("%d ", ps->data[i]);} } int main() {SL plist;SLInit(&plist);int n = 0;scanf("%d", &n);getchar();SLCreate(&plist, n);int m = 0;scanf("%d", &m);SLPop(&plist, m);if (plist.size == 0){printf("-1");}else{SLPrint(&plist);}return 0; }

總結

以上是生活随笔為你收集整理的数据结构之SWUSTOJ1038: 顺序表中重复数据的删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。