| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 609 人关注过本帖
标题:速求顺序表插入函数怎么错了???
只看楼主 加入收藏
BCCN帅
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2011-12-18
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:7 
速求顺序表插入函数怎么错了???
#include"stdio.h"
#include"malloc.h"
typedef struct {
        char a[20];     
          int  num;                  
        char c[20];                 
    } ElemType;
typedef struct {
        ElemType city[3];      
          int length; //当前线性表长度               
  } SqList;   
void InitList(SqList *&L)
{
        L=(SqList*)malloc(sizeof(SqList));
        L->length=0;
}
void CreateList(SqList *&L,ElemType city[],int n)
{
    int i;
    L=(SqList*)malloc(sizeof(SqList));
    for(i=0;i<n;i++)
    L->city[i]=city[i];
    L->length=n;
}
void DestroyList(SqList *L)
{
    free(L);
}
int ListEmpty(SqList *L)
{
    return (L->length==0);
}
int ListLength(SqList *L)
{
    return (L->length);
}
void DispList(SqList *L)
{
    int i;
    if(ListEmpty(L)) return;
    for(i=0;i<L->length;i++)
    {
        printf("%s   0%o   %s\n",L->city[i].a,L->city[i].num,L->city[i].c);
    }
}
int LocateElem(SqList *L,ElemType e)
{
    int i=0;
    while(i<L->length&&L->city[i].num!=e.num)
        i++;
    if(i>=L->length)
        return 0;
    else
        return i+1;
}
int ListInsert(SqList *L,int i,ElemType e)
{
        int j;
    if(i<1||i>L->length+1)
        return 0;
    i--;
    for(j=L->length;j>i;j--)
        L->city[j]=L->city[j-1];
    L->city[i]=e;
    L->length++;
    return 1;
}
int ListDelete(SqList *&L,int i,ElemType &e)
{
    int j;
    if(i<1||i>L->length) return 0;
    i--;
    e=L->city[i];
    for(j=i;j<L->length-1;j++)
        L->city[j]=L->city[j+1];
    L->length--;
    return 1;
}
void main()
{
 SqList *L;
 ElemType city[3]={{"beijing",010,"首都"},{"shanghai",021,"直辖市"},{"tianjin",032,"直辖市"}};
 ElemType e1={"shanghai",021,"直辖市"};
  // ElemType city[1]={"beijing",010,"首都"};
//  ElemType  city[2]={"shanghai",021,"直辖市"};

 printf("1建立顺序表L\n");
  CreateList(L,city,3) ;
 printf("2顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
 printf("3顺序表L的长度=%d\n",ListLength(L));
 printf("4输出线性表L:\n");
  DispList(L);
  printf("5元素e1的位置是%d\n",LocateElem(L,e1));

      ElemType e2={"chongqing",041,"直辖市"};
  printf("6在第2个位置上插入元素e2\n");
  ListInsert(L,2,e2);
  printf("输出插入后的顺序表\n");
 DispList(L);

ElemType  e;
printf("7删除L的第2个元素\n");
 ListDelete(L,2,e);
printf("输出删除后的顺序表\n");
 DispList(L);
}
搜索更多相关主题的帖子: void 线性表 include 
2012-11-12 03:09
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
L->city[i]=city[i];为什么这样子写?
2012-11-14 10:25
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
程序代码:
int ListInsert(SqList *L,int i,ElemType e)
{
    int j;
    if(i<1||i>L->length+1)
        return 0;
    i--;
    for(j=L->length;j>i;j--)
        L->city[j]=L->city[j-1];
    L->city[i]=e;
    L->length++;
    return 1;
}  这个 表的长度 最大长度为3  再往里面填东西  是不行的
2012-11-14 10:29
BCCN帅
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2011-12-18
收藏
得分:0 
L->city[i]=city[i];就是把结构体数组的值赋到顺序表的节点数据上,建立顺序表。
这个程序好像就是你说的这个问题,我如果先调用删除函数,然后再调用插入函数,程序就能正常运行,但怎么解决程序的这个问题呢?
谢谢了!
2012-11-14 20:43
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 4楼 BCCN帅
typedef struct {
         ElemType *city;      //改成动态的
           int length; //当前线性表长度               
   } SqList;   
2012-11-14 21:05
BCCN帅
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2011-12-18
收藏
得分:0 
只把ElemType city[3]改成ElemType *city后程序还不能运行?
2012-11-14 21:45
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:5 
回复 6楼 BCCN帅
需要为它 动态申请内存
2012-11-15 11:47
BCCN帅
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2011-12-18
收藏
得分:0 
谢谢了
2012-11-15 13:07
快速回复:速求顺序表插入函数怎么错了???
数据加载中...
 
   



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

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