线性表的问题

teacher1998 2006-03-03 11:01:13
最近在学习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;


来写一个顺序表的、完全基于函数的程序啊。
...全文
159 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiftymetre 2006-03-04
  • 打赏
  • 举报
回复
#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();
}




找来的
非完美主义者 2006-03-04
  • 打赏
  • 举报
回复
写入线性表时注意对数组越界进行保护阿
teacher1998 2006-03-04
  • 打赏
  • 举报
回复
为什么没人帮我看看?
teacher1998 2006-03-03
  • 打赏
  • 举报
回复
帮我看看各位

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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