顺序表的问题!
最近在学习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;
来写一个顺序表的、完全基于函数的程序啊。