빠 른 검색 방법 으로 순서 표 의 요 소 를 삭제 합 니 다.

순서 표를 사용 하여 요 소 를 저장 하고 일정한 요 소 를 삭제 합 니 다.전통 적 으로 옮 겨 다 니 는 방법의 시간 복잡 도 는 O(n^2)입 니 다.빠 른 검색 방법 으로 시간 복잡 도 를 O(n)로 합 니 다. 빠 른 검색 사상 을 사용 하여 두 변수 i 와 k 로 순서 표 에서 처 리 된 양 끝 요소 의 아래 표 시 를 기록 하고 검색 하면 i 를 증가 하고 j 를 감소 합 니 다.서로 다른 i 곳 의 수 치 를 만 났 을 때 j 곳 의 교환 을 i>=j 까지 모든 요 소 를 한 번 에 이동 하기 때문에 복잡 도 는 O(n)입 니 다.
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct Seqlist
{
    char element[MAX];
    int n;
}*PSeqlist;

int delx_seq(PSeqlist p,char q)//        p   ,         
{
    int i = 0,j = p->n-1,count = 0;

    while(i < j)
    {
        if(p->element[i] == q)
        {
            while((p->element[j] == q) &&(j != i))
            {
                j--;
                count++;
            }
            if(j == i)
            {
                p->n = p->n-count-1;
            }
            else
            {
                p->element[i] = p->element[j];
                count++;
                j--;
            }
        }
        i++;
    }
    p->n = p->n-count;
    if(p->element[i] == q)
    {
        p->n--;
        count++;
    }

    return count;
}
PSeqlist creatNulllist(int n)
{
    PSeqlist palist;
    palist = (PSeqlist)malloc(sizeof(struct Seqlist));
    if(palist != NULL)  palist->n = n;
    else printf("Out of space!
"); return palist; } int main() { int n,i; char p; PSeqlist palist; printf("Input the number of element:
"); scanf(" %d",&n); palist = creatNulllist(n); printf("Input the element:
"); for(i = 0;i < n;i++) { scanf(" %c",&(palist->element[i])); } printf("The element you want to delete:
"); scanf(" %c",&p); printf("The num of %c have been delete is %d",p,delx_seq(palist,p)); return 0; }

좋은 웹페이지 즐겨찾기