CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

顺序表的问题!

楼主teacher1998(英语+asp.net+MsSQL)2006-03-03 22:57:08 在 专题开发/技术/项目 / 数据结构与算法 提问

最近在学习Data   Structure,从最基础的线性表开始.现有一问题,望各位指点:  
  我们都知道线性表有两种存储形式:顺序存储形式和链式存储形式.我是问题就是有关顺序表的:  
   
  #define   MAXSIZE   1024;//定义顺序表中可以容纳元素的最多个数  
  typedef   char   elemtype;//定义顺序表中元素类型  
   
   
   
   
  typedef   struct    
  {  
  elemtype   data[MAXSIZE];//顺序表的元素  
  int   last;//表示顺序表的元素个数  
  }sequenlist;  
   
   
  现在我想用这个顺序定义来实现常见的:  
  ⑴置空线性表  
  void   SetNull(L)//置空线性表L  
  sequenlist   *L;//定义L为指向结构体sequenlist的指针  
  {  
  L->last=-1;//设置线性表L的last域为-1  
  }  
  ⑵求线性表的长度  
  int   Length(L)  
  sequenlist   *L;   //定义L为指向结构体sequenlist的指针  
  {  
  return   (L->last+1);//返回线性表L的长度  
  }  
  ⑶向线性表中第i个元素处插入一个新的元素  
  int   Insert(L,X,i)//   在线性表L中第i个位置上插入值为X的元素。  
  Sequenlist   *L;//   定义L为指向结构体sequenlist的指针  
  int   i;  
  elemtype   x;  
  {  
  int   j;  
  if(L->last>=MaxSize-1)  
  {  
  printf(“你输入的位置超出线性表的容量!”);  
  return   NULL;//返回空值,表示插入操作失败  
  }  
  else    
  if((i<1)||i>L->last+1)  
  {  
  printf(“插入位置错误!你输入的插入位置应为1~%d”,L->last+1);  
  return   NULL;  
  }  
  else  
  {  
  for(j=L->last;j>=i-1;j--)  
  L->data[j+1]=L->data[j];//后续元素后移(从最后一个元素开始)  
  L->data[i-1]=x;//将元素x插入到第i个的位置  
  L->last=L->last+1;//顺序表的长度加1  
  Return(1);//表示插入成功  
  }  
   
   
  ...  
   
  这些东西我都懂,代码片段也都能看懂,可是我却写不出个完整程序来实现它们,比方说,我还想写个  
  Creat(L)的函数来创建线性表,可是我的程序不能运行,即使运行,结果也是错的.希望大家帮忙写个creat(L)函数,能写个完整的程序更好.当然,不要用到指针,因为这个是顺序线性表.最后,想问各位达人,你们在学习DS的时候也我如我的困惑否--->能看懂算法片段,却不能写出完整的程序!  
  (我自己写的一个类似的程序如下:  
   
  #include<stdio.h>  
  #include<ctype.h>  
   
  #define   N   100  
  int   a[N];  
  int   n;/*线性表的表长*/  
   
  main()  
  {  
  int   c;     /*代表线性表的元素*/  
  int   i=0;/*循环变量*/  
  int   in_num;   /*待插入的数*/  
  int   in_put;   /*待插入的位置*/  
   
  clrscr();  
  printf("\t   input   an   integer(input   9999   to   quit):");  
          scanf("%d",&c);  
  a[i]=c;/*用数组装入线性表的第一个元素*/  
  while(c!=9999)  
  {  
  printf("\n\tinput   an   integer(input   9999   to   quit):");  
  scanf("%d",&c);  
   
  i++;  
  a[i]=c;/*用数组装入线性表的其他元素*/  
  }  
  n=i;     /*得到线性表的长度*/  
   
  /*显视线性表*/  
  printf("\t");  
  for(i=0;i<n;i++)  
          printf("     a[%d]=%d     ",i+1,a[i]);  
   
  label:printf("\n\t\t   please   input   where   to   insert(on   it)\n");  
   
  printf("\t\t");scanf("%d",&in_put);  
  if(in_put<=0||in_put>n)  
  {  
          printf("\t\t   error   seat.the   number   you   input   is   >0   and   <=%d",n);  
          goto   label;  
  }  
  printf("\t\t   please   input   the   insert   number:\n");  
  printf("\t\t");scanf("%d",&in_num);  
  n=n+1;  
  for(i=n;i>=in_put;i--)/*从最后一个元素向后移动*/  
  /*for(i=in_put;i<n+1;i++)从第i个元素向前最后一个插入*/  
  /*如果这样插入的话从第i+1个开始都是a[i+1]的值*/  
          a[i]=a[i-1];  
  a[in_put-1]=in_num;   /*将新元素插入到用户指定的位置*/  
   
  /*线性表的删除*/  
   
   
  printf("\n\t\tNow   the   new   sequence   is   :\n");  
  for(i=0;i<n;i++)  
          printf("     a[%d]=%d     ",i+1,a[i]);  
  printf("\n\n\n");  
  getch();  
   
  }  
   
  可以运行,但是是用全局数组实现的,也不是上面的定义形式.谁能帮我用#define   MAXSIZE   1024;//定义顺序表中可以容纳元素的最多个数  
  typedef   char   elemtype;//定义顺序表中元素类型  
   
   
   
   
  typedef   struct    
  {  
  elemtype   data[MAXSIZE];//顺序表的元素  
  int   last;//表示顺序表的元素个数  
  }sequenlist;  
   
   
  来写一个顺序表的、完全基于函数的程序啊。 问题点数:40、回复次数:7Top

1 楼wzjall(风)回复于 2006-03-04 00:37:38 得分 10

严老师的书上不是有比较完整的程序!  
  其实我认为重要的还是思想!理解了就可以Top

2 楼teacher1998(英语+asp.net+MsSQL)回复于 2006-03-04 21:29:27 得分 0

严老师的书是基于指针的.我想实现啊Top

3 楼feny911(春韭秋菘)回复于 2006-03-07 05:58:44 得分 5

想问楼主几个问题:  
  1、Creat(L)是什么函数?是不是create(L)?  
   
  2、如果第一个问题的答案是肯定的,请问:为什么要写这样的一个函数?  
  typedef   struct    
  {  
  elemtype   data[MAXSIZE];//顺序表的元素  
  int   last;//表示顺序表的元素个数  
  }sequenlist;  
  /*上面的代码不是已经创建了一个表吗?*/  
   
  3、顺序表为什么不能用指针?用数组和用指针区别很大吗?  
   
  //////////////////////////////////////////////  
  建议楼主还是先把C语言学好,数据结构先放一放吧。  
  磨刀不误砍柴功。  
  Top

4 楼declare64(这里高手真多)回复于 2006-03-09 17:46:33 得分 10

c   语言和算法还是不一样的;  
    最后两个同时学了Top

5 楼Steven725(海风)回复于 2006-03-11 15:19:36 得分 10

虽然说数据结构能用各种语言实现,基本思想不会变,但是我个人觉得用面向对象的思想  
  来学习DS会更易于理解,我就是用Java学的.Top

6 楼feny911(春韭秋菘)回复于 2006-03-14 23:42:26 得分 0

我的意思不是说一定要先学C,再学数据结构。  
  是因为楼主用的教材是C描述的,所以要先学好C。  
   
  每个小学生都是同时学语文和数学,那是因为有老师教。  
  如果谁想要自学数学,一定要先学好语文。  
  我不知道楼主是不是自学,如果他的老师连个顺序表都解释不清楚,跟自学也没什么两样。  
   
  说句不好听的,学C要是入门了,不至于连个顺序表都搞不懂。  
  Top

7 楼dutguoyi(新鲜鱼排)回复于 2006-03-15 08:58:40 得分 5

upTop

相关问题

  • 列表目录的顺序问题.
  • 如何用SQL顺序查多个表?
  • 顺序表的插入问题
  • 顺序表的插入问题!!
  • 表单控件的顺序问题
  • 求助:表单元素顺序问题
  • 取得所有表名时,如何按建表顺序排序?
  • ADOTable中记录顺序为何与物理表中记录顺序不一致?(50分)
  • 请教数据库建表是的列顺序及数据窗口列的顺序问题?
  • 为什么查询出来的记录的顺序和原先在表里的顺序不一样呢?

关键词

  • 指针
  • 结构
  • 表
  • 线性表
  • 顺序
  • sequenlist
  • 元素
  • 插入
  • 定义
  • 长度

得分解答快速导航

  • 帖主:teacher1998
  • wzjall
  • feny911
  • declare64
  • Steven725
  • dutguoyi

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo