回 帖 发 新 帖 刷新版面

主题:严蔚敏老师的数据结构用C我实现了算法2.13-2.17 P32

#include<stdio.h>
#define M 12
//S对应书上的space   s对应书上的S
struct SLinkList{
    int data;
    int cur;
}component,S[M],space[M];
int r;

//int LocateElem_SL(SLinkList S,int e){
//    i=S[0].
void InitSpace_SL(){
    for(int i=0; i<M-1; i++)
    {
        S[i].data=i;
        S[i].cur=i+1;
    }
    S[i].data=i;
    S[i].cur=0;
}
int Malloc_SL(){
    int i = S[0].cur;
    if(S[0].cur)S[0].cur=S[i].cur;
    return i;
}
void Free_SL(int k){
    
    S[k].cur=S[0].cur;
    S[0].cur=k;
    
}

void difference(int &s){
    InitSpace_SL();
    s= Malloc_SL();
    int r=s,m,n,i,b,p,k;
    printf("\n输入m n的值和小于二十");
    scanf("%d%d",&m,&n);
    for(int j=1; j<=m; j++)
    {
        i =Malloc_SL();
        scanf("%d",&S[i].data);
        S[r].cur=i;
        r=i;
    }
    S[r].cur=0;
    for(j=1; j<=n; ++j)
    {

        scanf("%d",&b);
        p=s;
        k=S[s].cur;
        while(k!=S[r].cur&&b!=S[k].data)
        {
            p=k;
            k=S[k].cur;
        }
        if(k==S[r].cur)
        {
            i=Malloc_SL();
            S[i].data=b;
            S[i].cur=S[r].cur;
            S[r].cur=i;
            //r=i;//书上没有,但我觉得应该有
        }
        else
        {
            S[p].cur=S[k].cur;
            Free_SL(k);
            if(r==k)r=p;
        }
    }
}

            

    


void main()
{
    /*InitSpace_SL();
    for(int i=0; i<M; i++)
        printf("%d ",S[i].data);
    printf("\n");
    i=0;
    do{

    printf("%d ",S[i].data);
    i=S[i].cur;
    }while(i!=0);
    printf("\n");*/
    int s=0;
    difference(s);
    printf("\n");
    s=S[s].cur;
    while(S[s].cur!=0)
    {
        printf("%d ",S[s].data);
        s=S[s].cur;
    }
    printf("%d ",S[s].data);

    
}
这本书的讲的真的很不错,所以觉得应该把这里的东西用C实现一遍的话应该对编程者很帮助。所以希望更多人与我同行。大家共同提高。

回复列表 (共4个回复)

沙发

谢谢

ps:我假期一般也是12点起床的:D

板凳

同路人;)

3 楼

..

4 楼


我上课用的书好象是用语言实现的
但是我还是听不懂老师的讲解,我是不是很烂啊

我来回复

您尚未登录,请登录后再回复。点此登录或注册