CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

线性表的问题

楼主teacher1998(英语+asp.net+MsSQL)2006-03-03 23:01:13 在 C/C++ / C语言 提问

最近在学习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;  
   
   
  来写一个顺序表的、完全基于函数的程序啊。 问题点数:20、回复次数:4Top

1 楼teacher1998(英语+asp.net+MsSQL)回复于 2006-03-03 23:26:19 得分 0

帮我看看各位Top

2 楼qyshooter(青阳)回复于 2006-03-04 10:38:01 得分 5

写入线性表时注意对数组越界进行保护阿  
  Top

3 楼teacher1998(英语+asp.net+MsSQL)回复于 2006-03-04 21:26:39 得分 0

为什么没人帮我看看?Top

4 楼fiftymetre(50米深蓝)回复于 2006-03-04 23:18:12 得分 15

#include   "stdio.h"  
  #include   "conio.h"  
  #define   MaxSize   50  
  typedef   char   elemtype;  
  typedef   struct   node    
  {  
          elemtype   data[MaxSize];  
          int   len;  
  }lnode,*List;  
   
  void   init(List   L)  
  {   L->len=0;}  
   
  int   length(List   L)  
  {   return   L->len;}  
   
  elemtype   getnode(List   L,int   pos)  
  {  
          if(pos<1   ||   pos>L->len)   printf("error");  
          else   return   L->data[pos-1];  
  }  
   
  int   locate(List   L,elemtype   x)  
  {       int   i=0;  
          while(i<L->len   &&   L->data[i]!=x)   i++;  
          if(i==L->len)   return   -1;  
          else   return(i+1);  
  }  
   
  void   insert(List   L,int   pos,elemtype   x)  
  {         int   j;  
          if(pos<1   ||   pos>L->len+1)   printf("insert   error\n");  
          else   {  
                  L->len++;  
              for(j=L->len;j>=pos;j--)             L->data[j]=L->data[j-1];  
              L->data[pos-1]=x;   };  
  }  
       
  void   delnode(List   L,int   pos)  
  {   int   j;  
      if(pos<1   ||pos>L->len)printf("del   error\n");  
      else   {  
              for(j=pos;j<L->len;j++)  
              L->data[j-1]=L->data[j];    
              L->len--;}  
      }          
      void   print(List   L)  
      {     int   i;  
              for(i=1;i<L->len;i++)  
              printf("%c->",L->data[i-1]);  
              printf("%c",L->data[L->len-1]);  
        }        
  main()  
  {  
        int   i=1,n;  
        lnode   L;  
        char   ch,x;  
        init(&L);  
        printf("\n\n\n*******************************顺序表演示程序***********\n");  
        printf("请输入你想建立的顺序表的元素,以?结束:");    
        ch=getchar();  
        while(ch!='?')  
        {insert(&L,i,ch);  
          i++;  
          ch=getchar();  
        };  
  printf("你建立的顺序表为:");  
  print(&L);  
  printf("\n顺序表的长度为:%d",L.len);  
  printf("\n输入你想查找的元素:");  
  fflush(stdin);  
  scanf("%c",&x);  
  printf("你查找的元素为%c序位为%d",x,locate(&L,x));    
  printf("\n输入你想查找的元素序位:");  
  scanf("%d",&n);        
  printf("\n你查找的元素为:%c",getnode(&L,n));    
  printf("\n输入你想插入的元素以及序位:<用逗号隔开>");  
  fflush(stdin);  
  scanf("%c,%d",&x,&n);  
            insert(&L,n,x);  
  printf("\n插入后顺序表为:");  
            print(&L);  
            fflush(stdin);  
  printf("\n请输入你想删除的元素序位:");  
  scanf("%d",&n);        
          delnode(&L,n);  
  printf("\n删除后的顺序表为:");  
          print(&L);  
  printf("\n欢迎你和菜鸟一起进步");    
            getch();  
  }    
   
   
   
   
  找来的Top

相关问题

  • 线性表(链式表示)
  • 线性表基本问题!!!
  • 一个线性表问题
  • 线性表怎么初始化那?
  • 线性表的合并算法
  • c的线性链表排序。
  • 线性表编译不能通过
  • 用c++怎么定义线性表?
  • 线性表的 间接寻址 描述
  • 一个线性表的问题.(50分)

关键词

  • 指针
  • 结构
  • 线性表
  • 元素
  • sequenlist
  • 顺序表
  • 插入
  • 序位
  • elemtype
  • printf

得分解答快速导航

  • 帖主:teacher1998
  • qyshooter
  • fiftymetre

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

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