| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 420 人关注过本帖
标题:顺序表为什么初始化不了啊,求大神帮忙,新手上路坎坷重重啊~
只看楼主 加入收藏
左左奋强
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-10-27
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
顺序表为什么初始化不了啊,求大神帮忙,新手上路坎坷重重啊~
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#define LIST_INIT_SIZE 100
#define LISTINCREMENT  10
#define OVERFLOW -2
#define OK 1           
typedef struct
{
 int *elem;
 int length;
 int listsize;
}Sqlist;
int InitList_Sq(Sqlist L)
{
 L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
 if(! L.elem) exit(OVERFLOW);
 L.length=0;
 L.listsize=LIST_INIT_SIZE;
 return OK;
}
int readlist(Sqlist L){
 int a,i=0;
 printf("请输入顺序表A的数据:");
 scanf("%d",&a);
 if(a=='\n')printf("\n你输入的数据为空,请重新输入:");
 
 while(a!='\n'){
   
  L.elem[i]=a;
  scanf("%d",&a);
  i++;
    }
 return OK;
}
 
void sortlist(Sqlist L){
 int temp,j,k;  
 for(j=1; j<=L.length;j++)
    for(k=1;k<=L.length-j;j++)
      if(L.elem[k]>L.elem[k+1])
    {temp=L.elem[k];
     L.elem[k]=L.elem[k+1];
     L.elem[k+1]=temp;
    }  
    printf("创建顺序表A成功。\n");
 printf("新建顺序表A:");
 for(j=1;j<=L.length;j++)printf("%d",L.elem[j-1]);
 printf("\n");
}
int ListInsert_Sq(Sqlist L,int x){
 int *newbase,*p; int q,i=0;
 if(L.length>=L.listsize){
  newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
  if(!newbase)exit(OVERFLOW);
  L.elem=newbase;   
  L.listsize+=LISTINCREMENT;
 }
 if(x>L.elem[i-1])i++;
 q=L.elem[i-1];   
 p=&(L.elem[L.length-1]);
 while(i<=L.length-1&&p>&(L.elem[i])) {
  *(p+1)= *p;
  p--;
 }
 L.elem[i]=q;   
 L.elem[i-1]=x;  
 L.length++;
 return OK;
}
void main()
{
Sqlist A;  
int x;
int i;
InitList_Sq(A);
if(InitList_Sq(A)==OK){
    if(readlist(A)==OK)
       sortlist(A);
}
else printf("创建顺序表A失败\n");
printf("\n请输入所需插入的数据:");
scanf("%d",&x);
if(ListInsert_Sq(A,x)==OK)
   printf("\n插入数据成功\n");
sortlist(A);
printf("插入后顺序表A:");
for(i=0;i<=A.length-1;i++)
   printf("%d",A.elem[i]);   
}
搜索更多相关主题的帖子: return include 
2012-10-27 21:26
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:2 
你在函数中操作结构体的时候一定要传入地址啊,比如int InitList_Sq(Sqlist *L)
不然传入的参数是结构体的一个副本,对它的操作都没作用在原结构体上
另外你在int readlist(Sqlist *L)中的判断是不对的
while(a!='\n') 中 a 永远不可能等于'\n'
并且
L.elem[i]=a;
scanf("%d",&a);
i++;
你在init()中只申请了一块Int区域,用数组操作大于1块int区域的数据就访问越界啦
2012-10-28 10:46
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
支持一下

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-10-28 11:51
左左奋强
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-10-27
收藏
得分:0 
回复 2楼 obstratiker
大神啊~~sorry啊~~我按照要求重新写了一个,可是还是问题重重~~求大神帮助~~谢谢大神~~/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "conio.h"
#define error 0
#define overflow -1
#define ok 1
#define list_init_size 100
#define listincrement 10
typedef int status;
typedef int elemtype;
typedef struct{
    int      *elem;
    int      length;
    int      listsize;
}sqlist;
status initlist_sq(sqlist *q){
    q->elem=(int*)malloc(list_init_size*sizeof(int));
    if(!q->elem)exit(overflow);  //存储空间分配失败
    q->length=0;                 //空表长度为0
    q->listsize=list_init_size;  //初始存储容量
}
status readlist(sqlist *p,int n){   //读入顺序表数据,并进行排序
    int i,j,temp;
    p->length=n;
    printf("请输入顺序表数据:");
    for(i=0;i<n;i++)
       scanf("%d",&p->elem[i]);
    printf("\n排序后数据:");
    for(i=1;i<n;i++)         //数据排序
       for(j=1;j<=n-i;j++)
         if(p->elem[i]>p->elem[i+1])
         {  temp=p->elem[i];
             p->elem[i]=p->elem[i+1];
             p->elem[i+1]=temp;
         }
    for(i=0;i<n;i++)
       printf("%d",p->elem[i]);
    return ok;
}
status insert(sqlist *va, int e){  //进行数据插入
    int *newbase;int i;int *p,*q;
    if(va->length+1>va->listsize) {  //存储已满,增加分配
        newbase=(int *)realloc(va->elem,
              (va->listsize+listincrement)*sizeof(int));
        if(!=newbase)printf("overflow");  //存储分配失败
        va->elem=newbase;
        va->listsize+=listincrement;
    }
    for(i=0;e<va->elem[i];i++);
    q=&(va->elem[i]);   
    for(p=&(va->elem[va->length-1]);p>=q;--p)
       *(p+1)=*p;   //插入位置及之后的元素右移
    *q=e;
    va->length++;
    return ok;
}
   
void main()
{  
    int i,n,e;
    sqlist A;
    initlist_sq(&A);
    printf("请输入顺序表A长度:");
    scanf("%d",&n);
    readlist(&A,n);
    printf("请输入插入数据:");
      scanf("%d",&e);
    insert(&A,e);
    printf("输出插入后顺序表:");
    for(i=0;i<A.length;i++)
      printf("%d",A.elem[i]);
    getch();
}

新手上路,真心求教!!
2012-10-29 12:21
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:18 
就是排序那写错了,其他基本没问题,你把输出加个空格,不然数字全粘一块怎么看啊……
程序代码:
#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
#include "conio.h"
#define error 0
#define overflow -1
#define ok 1
#define list_init_size 100
#define listincrement 10
typedef int status;
typedef int elemtype;
typedef struct{
    int      *elem;
    int      length;
    int      listsize;
}sqlist;
void initlist_sq(sqlist *q){
    q->elem=(int*)malloc(list_init_size*sizeof(int));
    if(!q->elem)exit(overflow);  //存储空间分配失败
    q->length=0;                 //空表长度为0
    q->listsize=list_init_size;  //初始存储容量
}
int readlist(sqlist *p,int n){   //读入顺序表数据,并进行排序
    int i,j,temp;
    p->length=n;
    printf("请输入顺序表数据:");
    for(i=0;i<n;i++)
       scanf("%d",&p->elem[i]);
    printf("\n排序后数据:");
    for(i=0;i<n-1;i++)         //数据排序                排序写错了,自个琢磨琢磨吧
       for(j=0;j<n-i-1;j++)
         if(p->elem[j] > p->elem[j+1])
         {  temp=p->elem[j];
             p->elem[j]=p->elem[j+1];
             p->elem[j+1]=temp;
         }
    for(i=0;i<n;i++)
       printf("%d ",p->elem[i]);
    return ok;
}

int insert(sqlist *va,int e)
{        //进行数据插入
    int *newbase;int i;int *p,*q;
    if(va->length+1>va->listsize) {  //存储已满,增加分配
        newbase=(int *)realloc(va->elem,
              (va->listsize+listincrement)*sizeof(int));
        if(!newbase)printf("overflow");  //存储分配失败
        va->elem=newbase;
        va->listsize+=listincrement;
    }
    for(i=0;e>va->elem[i];i++);
    q=&(va->elem[i]);  
    for(p=&(va->elem[va->length-1]);p>=q;--p)
       *(p+1)=*p;   //插入位置及之后的元素右移
    *q=e;
    va->length++;
    return ok;
}
   
void main()
{ 
    int i,n,e;
    sqlist A;
    initlist_sq(&A);
    printf("请输入顺序表A长度:");
    scanf("%d",&n);
    readlist(&A,n);
    printf("请输入插入数据:");
    scanf("%d",&e);
    insert(&A,e);
    printf("输出插入后顺序表:");
    for(i=0;i<A.length;i++)
      printf("%d ",A.elem[i]);
    printf("\n");                    //这还是用printf吧

 //   getch();
}

2012-10-29 13:36
左左奋强
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-10-27
收藏
得分:0 
回复 5楼 obstratiker
大神吖~~终于碰到靠谱的好人啦~~绝对强!!

新手上路,真心求教!!
2012-10-29 20:36
快速回复:顺序表为什么初始化不了啊,求大神帮忙,新手上路坎坷重重啊~
数据加载中...
 
   



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

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