| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1250 人关注过本帖
标题:关于顺序表结构指针的问题。
只看楼主 加入收藏
ctw888
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-5-22
收藏
 问题点数:0 回复次数:3 
关于顺序表结构指针的问题。
/* Note:Your choice is C IDE顺序表的插入与删除 */
#include "stdio.h"
#define ListSize 10
typedef int DataType;
typedef struct{
    DataType data[ListSize];
    int length;
}seqlist;
#define n 9
#define Error printf
void deletelist(seqlist *L);
void insertlist(seqlist *L);
main()
{seqlist *L;      //疑问:这里定义一个结构指针,能理解。
int i;
char c;
printf("请递增输入%d个整数(用空格间隔输入):\n",n);
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);  //这里直接使用这个指针。我理解应该是先定义一个结构变量,;
printf("请选择:\n");      //然后结构指针指向结构变量,这里没有定义结构变量等于没分配空间,
printf("A-------------插入----------\n");    //怎么会用L->data?

printf("B-------------删除----------\n");
printf("C-------------退出----------\n");   
scanf("\n%c",&c);
while(c!='c' && c!='C')
{if(c=='A' || c=='a') insertlist(L);
    else deletelist(L);
    printf("当前顺序表中的数据为:\n");
    for(i=0;i<L->length;i++)
    printf("%3d",L->data[i]);
    printf("\n请再选择:\n");
    printf("A-------------插入----------\n");
    printf("B-------------删除----------\n");
    printf("C-------------退出----------\n");
    scanf("\n%c",&c);
}
}
void insertlist(seqlist *L)
{int x,i,j;
    printf("\n请输入要插入的整数:");
    scanf("\n%d",&x);
    printf("\n在下面序列中插入%d\n",x);
    for(i=0;i<L->length;i++)
    printf("%3d",L->data[i]);
    i=0;
    while(i<L->length && x>L->data[i]) i++;
    if(i<0 || i>L->length+1)
    Error("\n插入位置错误\n");
    else if(L->length>=ListSize) Error("\n表溢出无法插入");
    else {printf("\n将数据%d插入到第%d号的位置上\n",x,i);
        for(j=L->length-1;j>=i;j--)
        L->data[j+1]=L->data[j];
        L->data[i]=x;
        L->length++;
    }
    }
void deletelist(seqlist *L)
{int x,i,j,num;
    printf("\n请输入要删除的整数");
    scanf("\n%d",&x);
    printf("\n在下面序列中删除%d\n",x);
    for(i=0;i<L->length;i++)
    printf("%3d",L->data[i]);
    i=0;num=0;
    while(i<L->length && x>L->data[i]) i++;
    if(x!=L->data[i]) Error("\n没有找到要删除的整数\n");
    else {num++;
        while(L->data[i+1]==x)
        {i++;num++;}
        printf("\n删除原表中从第%d个位置以后的%d个数据%d\n",i,num,x);
        for(j=i+1;j<=L->length-1;j++)
        L->data[j-num]=L->data[j];
        L->length=L->length-num;
    }
    }

[[it] 本帖最后由 ctw888 于 2008-11-20 15:52 编辑 [/it]]
搜索更多相关主题的帖子: 顺序表 
2008-11-20 15:51
ekohiliao
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2008-11-15
收藏
得分:0 
回复 1# 的帖子
首先,这里没有一个创建函数,当然你就不能理解你认为你不能理解的部分了。
如果定义一个createlist()函数应该没有问题了。首先是要输入数据。
然后你的deletelist函数后面while后面也有一点问题。
2008-11-20 19:53
ctw888
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-5-22
收藏
得分:0 
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);  
就是表创建的过程中啊。
我的意思如下:
1、定义了结构后,直接用L->data[i],不理解。
2、我感觉应该是如下加上一个变量的定义,然后再用L指向该变量的首地址,再用L->data[i];
例;
seqlist biao;
seqlist *L;
L=&biao;
for(i=0;i<n;i++)
scanf("%d",&L->data[i]);
2008-11-21 10:23
J_j
Rank: 1
等 级:新手上路
威 望:1
帖 子:100
专家分:0
注 册:2008-8-21
收藏
得分:0 
结构体定义不是这样的, typedef struct seqlist{
    DataType data[ListSize];
    int length;
}s;
 下面 就是:
 void main()
{
   struct *L;
   L=&s;
   .........
}  这样就对了。
2008-11-21 20:02
快速回复:关于顺序表结构指针的问题。
数据加载中...
 
   



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

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