| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2492 人关注过本帖, 1 人收藏
标题:线性表顺序存储结构的插入和删除,程序有点问题
取消只看楼主 加入收藏
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:2 
线性表顺序存储结构的插入和删除,程序有点问题
程序有点问题,请各位看看,指点,指点
#include <stdio.h>
#include <stdlib.h>
#define Listinitsize 100
#define Listincrement 10
typedef struct {
    int *elem;
    int length;
    int listsize;
}Sqlist;
int InitList_Sq(Sqlist *L)
{
    L->elem=(int *)malloc((Listinitsize) * sizeof(int));
    if(! L->elem)return(-1);
    L->length=0;
    L->listsize=Listinitsize;
    return 1;
}
int ListInsert_Sq(Sqlist *L,int i,int e)
{
    int *p,*q,*base;
    if(i<1||i>L->length+1)return 0;
    if(L->length>=L->listsize){
        base =(int *)realloc(L->elem,(L->listsize+Listincrement) *sizeof(int));
        if(! base)return -1;
        L->elem=base;
        L->listsize+=Listincrement;}
    q=&(L->elem[i-1]);
    for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p;
    *q=e;
    ++L->length;
    return 1;
    }
int ListDelete_Sq(Sqlist *L,int i)
{
    int *p,*q;
    if((i<1)||(i>L->length))return (-1);
    p=&(L->elem[i-1]);
    q=L->elem+L->length-1;
    printf("the deleted elem is %d \n",L->elem[i-1]);
    for(++p;p<=q;++p)
    *(p-1)=*p;
    --L->length;
    return 1;
    }
int inputlist(Sqlist *L)
{
    int i,*p;
 p=L->elem;
    printf("the list L_length is:");
    scanf("%d",&L->length);
    printf("\n");
    printf("the list element is:");
    for(i=0;i<L->length;i++)
    scanf("%d",(p+i));
    return 1;   
}
int display(Sqlist *L)
{   int i;
    printf("the list is:");
    for(i=0;i<L->length;i++)
    printf("%5d",*(L->elem++));
    printf("\n");
    return 1;   
    }
int InitList_Sq(Sqlist *L);
int display(Sqlist *L);
int inputlist(Sqlist *L);
int ListInsert_Sq(Sqlist *L,int i,int e);
int ListDelete_Sq(Sqlist *L,int i);
main()
{
    int i,choice, x;
    Sqlist La;
    InitList_Sq(&La);
   inputlist(&La);
do{
    printf("1  ListInsert\n");
    printf("2  ListDelete\n");
    printf("3  exit\n");
    printf("welcome to choice: ");
    scanf("%d",&choice);
    printf("\n");
    switch(choice){
      case 1:{
        printf("i,x=");
            scanf("%d,&d",&i,&x);
            ListInsert_Sq(&La, i, x);
            display(&La);}
            break;
      case 2:
          {
              printf("i=");
          scanf("%d",&i);
          ListDelete_Sq(&La,i);
          display(&La);
          }
          break;}
      }while(choice!=3);
    getchar();
}






搜索更多相关主题的帖子: 删除 线性 结构 顺序 
2009-10-03 11:28
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
收藏
得分:0 
运行时,结果不正确,本人觉得是那个主函数中循环 有问题,求那位帮忙改一下
2009-10-03 15:14
zcs302567601
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2009-9-21
收藏
得分:0 
回复 3楼 chenaiyuxue
比如,插入一个数时,结果插入的不是那个数,是其它的数,而且特别大;在循环的话,线性表中数基本上全部变成其它的数了。。。我也说不好,麻烦你运行一下就清楚问题了
2009-10-03 19:39
快速回复:线性表顺序存储结构的插入和删除,程序有点问题
数据加载中...
 
   



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

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