| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 964 人关注过本帖
标题:静态链表提问
只看楼主 加入收藏
yxlovemoney
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-6-3
收藏
 问题点数:0 回复次数:1 
静态链表提问
这是从严蔚敏,数据结构出写出来的,(作了一点点修改)
程序代码:
#include<stdio.h>
#define MAXSIZE 1000

typedef struct
{
    int data;   //存储数据
    int cur;    //相当于  *next
}component,SLinkList[MAXSIZE];

void InitSpace(SLinkList *space) //初始化
{
    //将一维数组space中各分量链成一个备用链表,space[0].cur为头指针,"0"表示空指针。
    int i;
    for(i=0;i<MAXSIZE-1;++i) space[i]->cur = i + 1;
    space[MAXSIZE-1]->cur = 0;
}

int Malloc(SLinkList *space)
{
    //若备用空间链表非空,则返回分配的结点下标,否则返回0
    int i;
    i = space[0]->cur;
    if(space[0]->cur) space[0]->cur = space[i]->cur; //相当于逐渐向前移
    return i;
}

void Free(SLinkList *space,int k)
{
    //将下标为k的空闲结点回收到备用链表
    space[k]->cur = space[0]->cur;
    space[0]->cur = k;
}
int LocateElem(SLinkList s,int e)
{
    //在静态单链线性表L中查找第1个值为e的元素
    int i;
    i = s[0].cur;

    while(i && s[i].data!=e) i = s[i].cur; //i = s[i].cur相当于p = p->next;
    return i;
}

void difference(SLinkList *space)
{
    //依次输入集合A和B的元素,在一维数组space中建立表示集合(A-B)U(B-A)
    //的静态链表,S为头指针,假设备用空间足够大,space[0].cur为其头指针。
    int s;
    int r,p,m,n,j,i,b,k;
    InitSpace(space);        //初始化备用空间
    s = Malloc(space);       //生成S的头结点
    r = s;                   //r指向s的当前最后结点  r取得第一个位置
    printf("please enter A and B elements\n");
    scanf("%d,%d",&m,&n);    //输入A和B的元素个数

    for(j=1;j<=m;++j)        //建立集合A的链表
    {
        i = Malloc(space);   //分配结点         i取得第二个位置
        scanf("%d",&space[i]->data);//输入A元素值
        space[r]->cur = i;   //插入到结尾
        r = i;
    }
    space[r]->cur = 0;       //尾结点指针为空
    
    for(j=1;j<=n;++j)        //依次输入B的元素,若不在当前表中,则插入否则删除
    {
        scanf("%d",&b);      //先取得数据
        p = s;
        k = space[s]->cur;   //指向集合A中第一个结点 即有数据的结点

        while(k!=space[r]->cur && space[k]->data!=b) //当前表中查找
        {
            p = k;            //接收找到 b 的位置
            k = space[k]->cur;//向前移
        }

        if(k==space[r]->cur) //当前表中不存在该元素,插入在r所指结点之后,且r的位置不变
        {
            i = Malloc(space);
            space[i]->data = b;
            space[i]->cur = space[r]->cur;
            space[r]->cur = i;
        }
        else                //该元素存在表中,删除
        {
            space[p]->cur = space[k]->cur;
            Free(space,k);
            if(r==k) r = p; //若删除的是r所指结点,则需修改尾指针
        }

    }

}

/*void display(SLinkList *space)
{
    int i,head;
    head = space[0]->cur;
    for(i=0;i<20;i++)
    {
        printf("%d,%d\n",space[head]->cur,space[head]->data);
        head = space[head]->cur;
    }
    printf("\n");

}*/
void main()
{
    SLinkList ss;
    difference(&ss);
    //display(&ss);
}


为什么运行时会有问题呢?请大大们指教下.
搜索更多相关主题的帖子: 链表 静态 提问 
2008-07-01 22:49
cdj_cjf
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-7-16
收藏
得分:0 
讲的好啊
详细资料在
http://bbs.掌中技术论坛
2008-07-16 14:43
快速回复:静态链表提问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.045562 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved