顺序表的问题!

teacher1998 2006-03-03 10: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;


来写一个顺序表的、完全基于函数的程序啊。
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
新鲜鱼排 2006-03-15
  • 打赏
  • 举报
回复
up
feny911 2006-03-14
  • 打赏
  • 举报
回复
我的意思不是说一定要先学C,再学数据结构。
是因为楼主用的教材是C描述的,所以要先学好C。

每个小学生都是同时学语文和数学,那是因为有老师教。
如果谁想要自学数学,一定要先学好语文。
我不知道楼主是不是自学,如果他的老师连个顺序表都解释不清楚,跟自学也没什么两样。

说句不好听的,学C要是入门了,不至于连个顺序表都搞不懂。
Steven725 2006-03-11
  • 打赏
  • 举报
回复
虽然说数据结构能用各种语言实现,基本思想不会变,但是我个人觉得用面向对象的思想
来学习DS会更易于理解,我就是用Java学的.
declare64 2006-03-09
  • 打赏
  • 举报
回复
c 语言和算法还是不一样的;
最后两个同时学了
feny911 2006-03-07
  • 打赏
  • 举报
回复
想问楼主几个问题:
1、Creat(L)是什么函数?是不是create(L)?

2、如果第一个问题的答案是肯定的,请问:为什么要写这样的一个函数?
typedef struct
{
elemtype data[MAXSIZE];//顺序表的元素
int last;//表示顺序表的元素个数
}sequenlist;
/*上面的代码不是已经创建了一个表吗?*/

3、顺序表为什么不能用指针?用数组和用指针区别很大吗?

//////////////////////////////////////////////
建议楼主还是先把C语言学好,数据结构先放一放吧。
磨刀不误砍柴功。
wzjall 2006-03-04
  • 打赏
  • 举报
回复
严老师的书上不是有比较完整的程序!
其实我认为重要的还是思想!理解了就可以
teacher1998 2006-03-04
  • 打赏
  • 举报
回复
严老师的书是基于指针的.我想实现啊

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧