| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5875 人关注过本帖, 1 人收藏
标题:<求助>顺序表的插入.删除.查找...
只看楼主 加入收藏
、镜花氺月
Rank: 2
等 级:论坛游民
帖 子:71
专家分:18
注 册:2010-11-5
结帖率:85.71%
收藏(1)
 问题点数:0 回复次数:6 
<求助>顺序表的插入.删除.查找...
程序代码:
#include<stdio.h>
#include<malloc.h>
/*分配内存空间*/
#define size 100
#define increment 10
typedef struct
{
    ElemType  *elem;
    int length;
    int listsize;
}SqList;
/*初始化顺序表*/
{
    L->elem=(ElemType *)malloc(size* sizeof(ElemType));
    if(!L->elem) 
        return 0;
    L->length = 0;
    L->listsize = size;
    return 1;
}

/*插入元素*/
int insert(SqList *L,int i,ElemType e)
{
    int j;
    ElemType *newbase;
    if(i<1||i>L->length+1) 
        return 0;
    if(L->length>=L->listsize)
    {
        newbase = ((ElemType * )realloc(L->elem,(L->listsize + increment)* sizeof(ElemType));
        if(!newbase)
            return 0;
        L->elem = newbase;
        L->listsize += increment;
    }
    for(j = L->length-1;j>=i-1;j--)
        L->elem[j+1] = L->elem[j];
    L->elem[i-1] = e;
    ++L->length;
    return 1;
}
/*删除*/
int Dele(SqList *L,int i,ElemType *e)
{
    int j;
    if(i<1||i>L->length)
        return 0;
    *e=L->elem[i-1];
    for(j = i-1;j<L->length-1;j++)
        L->elem[j] = L->elem[j+1];
    --L->length;
    return 1;
}
/*查找*/
int search(SqList *L,ElemType *e)
{
    int i=1;
    while(i<=L.length && L.elem[i-1]!=e)
        i++;
    if(i<=L.length)
        return 1;
    else 0;
}
/*主程序*/
int main()
{
    SqList L;
    int status,e,i;
    status = List(&L);
    if(status)
        printf("初始化成功");
    else
    {
        printf("初始化失败");
        return 0;
    }
    InputSqlist(&L);
    PrintSqlist(L);
    status = insert(&L,3,17);
    if(status)
    {
        printf("\n\n\n新顺序表");
        PrintSqlist(L);
    }
    else
    {
        printf("\n\n\n插入失败");
        return 0;
    }
    status = Dele(&L,9,&e);
    if(status)
    {
        printf("\n\n删除了:%d",e);
        printf("\n新顺序表:");
        PrintSqlist(L);
    }
    i=search(L,127);
    printf("\n\n第%d个元素为127",i);
    free(L.elem);
    return 0;
}





能找出来的我都找了. 是头文件有问题吗?
搜索更多相关主题的帖子: color 
2011-06-16 15:17
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
收藏
得分:0 
楼主,看来你没有理解严蔚敏那本数据结构的本意,书上的那些都是伪代码,具体的实现细节要根据自己的需要编写
个ElemType只是一种统称,意义是 element type,具体是什么类型,要自己定义
还有你那个初始化函数,把函数名丢了
具体情况我再看看。。。。
2011-06-16 18:36
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
顺序表就是数组。

—>〉Sun〈<—
2011-06-16 19:54
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
程序代码:
// 代码以补全

#include<stdio.h>
#include<malloc.h>
/*分配内存空间*/
#define size 100       // 顺序表初始化为元素个数
#define increment 10   // 顺序表满,则增加increment个元素

typedef int ElemType;

typedef struct {
    ElemType *elem;
    int length;
    int listsize;
} SqList;




/*初始化顺序表*/
int List(SqList * L)
{
    L->elem = (ElemType *) malloc(size * sizeof(ElemType));
    if (!L->elem)
        return 0;
    L->length = 0;
    L->listsize = size;
    return 1;
}

/*插入元素*/
int insert(SqList * L, int i, ElemType e)
{
    int j;
    ElemType *newbase;
    if (i < 1 || i > L->length + 1)
        return 0;
    if (L->length >= L->listsize) {
        newbase =
            (ElemType *) realloc(L->elem,
                     (L->listsize +
                      increment) * sizeof(ElemType));
        if (!newbase)
            return 0;
        L->elem = newbase;
        L->listsize += increment;
    }
    for (j = L->length - 1; j >= i - 1; j--)
        L->elem[j + 1] = L->elem[j];
    L->elem[i - 1] = e;
    ++L->length;
    return 1;
}

/*删除*/
int Dele(SqList * L, int i, ElemType * e)
{
    int j;
    if (i < 1 || i > L->length)
        return 0;
    *e = L->elem[i - 1];
    for (j = i - 1; j < L->length - 1; j++)
        L->elem[j] = L->elem[j + 1];
    --L->length;
    return 1;
}

/*查找*/
int search(SqList * L, ElemType e)
{
    int i = 1;
    while (i <= L->length && L->elem[i - 1] != e)
        i++;
    if (i <= L->length)
        return 1;
    else
        return 0;
}

/* 输入数据 */
int InputSqlist(SqList *L)
{
    int i;
    ElemType d;
    printf("\n输入一串数字,数字间用空格空开,结束输入用#字符: ");
    for (i = 0; scanf("%d", &d) == 1; ++i)
        insert(L, i+1, d);
    while ( (i = getchar()) != '\n' && i != EOF)
        continue;
    putchar('\n');
    return i;
}

/* 打印顺序表 */
int PrintSqlist(SqList *L)
{
    int i;
    printf("\n输出顺序表: ");
    for (i = 0; i < L->length; ++i)
        printf("%d ", L->elem[i]);
    putchar('\n');
    return i;
}

/*主程序*/
int main()
{
    SqList L;
    int status, e, i;
    status = List(&L);
    if (status)
        printf("初始化成功");
    else {
        printf("初始化失败");
        return 0;
    }
    InputSqlist(&L);
    PrintSqlist(&L);
    
    status = insert(&L, 3, 17);
    if (status) {
        printf("\n\n\n位置3插入了17\n新顺序表");
        PrintSqlist(&L);
    } else {
        printf("\n\n\n位置3插入17失败");
        return 0;
    }
    status = Dele(&L, 9, &e);
    if (status) {
        printf("\n\n删除:%d", e);
        printf("\n新顺序表:");
        PrintSqlist(&L);
    }
    e = 127;
    i = search(&L, e);
    printf("\n\n第%d个元素为127", i);
    free(L.elem);
    return 0;
}


[ 本帖最后由 cosdos 于 2011-6-16 22:18 编辑 ]

—>〉Sun〈<—
2011-06-16 22:16
、镜花氺月
Rank: 2
等 级:论坛游民
帖 子:71
专家分:18
注 册:2010-11-5
收藏
得分:0 
回复 4楼 cosdos
非常感谢.
2011-06-18 15:16
、镜花氺月
Rank: 2
等 级:论坛游民
帖 子:71
专家分:18
注 册:2010-11-5
收藏
得分:0 
回复 4楼 cosdos
非常感谢.
2011-06-18 15:16
、镜花氺月
Rank: 2
等 级:论坛游民
帖 子:71
专家分:18
注 册:2010-11-5
收藏
得分:0 
回复 4楼 cosdos
我什么我写的ElemType *elem;就不能用?
2011-06-18 15:18
快速回复:<求助>顺序表的插入.删除.查找...
数据加载中...
 
   



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

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