sequenlist是定义的机构体,sequenlist*&L是出现在函数的参数里的,而且sequenlist*&L;//定义L是指针引用类型。
中心体是动物细胞中一种重要的细胞器,每个中心体主要含有两个中心粒。它是细胞分裂时内部活动的中心。因它总是位于细胞核附近的细胞质中,接近于细胞的中心,所以叫中心体。
动物细胞和某些低等植物细胞中有中心体。在电子显微镜下可以看到,每个中心体含有两个中心粒,这两个中心粒相互垂直排列。中心体与细胞的有丝分裂有关。
你要引用结构体类型名的话,就必须先声明过才可以。 不过,如果光是传一个地址的话,可以忽略其类型,如形参设为void *p,到了你需要的地方把再对其进行强制类型转换,依然可以作为结构体指针使用。 想让你明白的是,指针只是一个指针。
编写的程序是:
#include <stdio.h>。
#define maxsize 20。
typedef int datatype;。
typedef struct{datatype data[maxsize];int last;}sequenlist;。
void CreateList(sequenlist *L,int n)。
{int i;printf("please input n numbers\n");for(i=0;i<n;i++)。
{scanf("%d",&L->data[i]);(*L).last=n;}。
}void PrintList(sequenlist *L,int n){int i;。
printf("the sequenlist is\n");for(i=0;i<n;i++ printf("%d ",L->data[i]);。
}main(){
int i,x;
int n=10;
sequenlist L;
CreateList(&L,n);。
PrintList(&L,n);。
getchar();
getchar(); }
1、数据元素:是计算机科学术语。它是数据的基本单位,数据元素也叫做结点或记录。在计算机程序中通常作为一个整体进行考虑和处理。有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项(如书名、作者名等)为一个数据项。
2、编程序:是指在利用电子计算机自动处理问题,人们根据自己对信息处理的要求,给电子计算机设计指令。
typedef struct {。
DATATYPE1 datas[MAXSIZE]; //一个长度为MAXSIZE的类型是DATATYPE1的数组。
int last; //上面数组的实际有效长度。
}SEQUENLIST;
你可以理解为如果使用SEQUENLIST这个类型定义的将会是一个可变长度的DATATYPE1类型的数组,实际长度由(SEQUENLIST *)var->last 的值来指定。
缺点是浪费了从last到MAXSIZE之间的一段存储空间。
□代码好长,不大好看。最根本的错误是:在函数createList中的else语句块里,返回了一个指向局部变量(p)的指针(m)。局部变量在函数返回后就不再有效,所以应该改用动态内存分配来创建顺序表m。
□还有就是输入的时候(input函数中)last是数组的最后一个元素的下标,而输出时(output函数中)却用了<,应该用<=才能输出线性表的最后一个元素。
■其他地方没有看。我们可以接着讨论。修改的地方用以“!”开头的块注释标注,搜索“!”号就可以找到。
#include <stdio.h>。
#include <stdlib.h> /*!动态内存分配的函数在此文件中声明*/。
typedef int datatype;。
#define MAXSIZE 1024。
typedef struct
datatype data[MAXSIZE];。
int last;
}sequenlist;
sequenlist *r=NULL;。
//setNull(*L)置空表。
sequenlist * setNull(sequenlist *L)。
L->last=-1;。
L=NULL;
return L;
//int input(sequenlist *m) 输入,输入格式可变更。
int input(sequenlist *L)。
int a,i;
printf("Please enter the length of squenlist:\n");。
scanf("%d",&a);。
L->last=a-1;。
for(i=0;i<a;i++)。
{
printf ("Please enter data:\n");。
scanf("%d",&(L->data[i]));。
}
return 0;
//sequenlist * creatList(sequenlist *L) 建立线性表。
sequenlist * creatList(sequenlist *L)。
{
if(L!=NULL)
{
printf ("Please enter the length of squenlist:\n");。
return L;
}
else
{
sequenlist *m,p;。
m=&p;
input(m);
return m;/*!错误:返回指向局部变量的指针*/。
}
/*!用来取代上面的creatList函数*/。
sequenlist * creatList2(sequenlist *L)。
{
if(L!=NULL)
{
printf ("Please enter the length of squenlist:\n");。
return L;
}
else
{
sequenlist *m;。
m= (sequenlist *) calloc(1, sizeof(sequenlist));。
if(m==NULL ) return NULL;。
input(m);
return m;/*!错误:返回指向局部变量的指针*/。
}
//int length(squenlist *L) 求长度。
int length(sequenlist *L)。
if(L==NULL)
{
printf ("Such sequenlist do not exsit\n");。
return 0;
}
else
return (L->last+1);。
//datatype Get(sequenlist *L,int i) 取节点,返回datatype类型data[i-1]。
datatype Get(sequenlist *L, int i)。
if (i<=0||i>(L->last)+1)。
{
printf("error,overflow.Please input the number:\n");。
scanf("%d",&i);。
Get(L,i);//not all control paths return a value。
}
else
return L->data[i-1];。
//int Locate(sequenlist *L,datatype x)。
int Locate(sequenlist *L,datatype x)。
int i;
for(i=0;i<(L->last)+1;i++)。
{
if(L->data[i]==x)。
return (i+1);。
}
printf ("error, such x do not excist\n");。
return (-1);
//sequenlist * Insert(sequenlist *L, datatype x, int i)。
sequenlist * Insert(sequenlist *L, datatype x,int i)。
int j,k;
if(i==0||i>L->last+1)。
{
printf("overflow,Do you wanner to keep insert?\n");。
printf("Enter 1 for Yes, 0 for No\n");。
scanf("%d",&k);。
if (k)
{
printf("Please Enter i again:\n");。
scanf("%d",&i);。
Insert (L,x,i);。
}
else
return L;
}
else
{
L->last=L->last+1;。
for(j=L->last;j>i-1;j--)。
{
L->data[j]=L->data[j-1];。
}
L->data[j-1]=x;。
}
return (L);
//sequenlist *Delete(sequenlist *L,i),删除第i个数组元素char[i-1]。
sequenlist *Delete(sequenlist *L,int i)。
int j,k;
if(i==0||i>L->last+1)。
{
printf("overflow,Do you wanner to keep delete?\n");。
printf("Enter 1 for Yes, 0 for No\n");。
scanf("%d",&k);。
if (k)
{printf("Please Enter i again:\n");。
scanf("%d",&i);。
Delete(L,i);
}
else
return L;
}
else
{
for(j=i-1;j<L->last;j++)。
L->data[j]=L->data[j-1];。
L->last=L->last-1;。
return L;
}
//int output(sequenlist *L) 输出,输出格式可变更。
int output(sequenlist *L)。
{
int i;
printf("output sequential list data:\n");。
for (i=0;i<=L->last;i++)/*!把<改成了<=*/。
printf("%d ",L->data[i]);。
printf("\n");
return 0;
void main()
datatype a,x;
int b, i,len;
//scanf("%d%d",&i,&x);/*!格式字串中间的空格不要有*/。
// r=setNull(r);。
r=creatList2(r);/*!调用函数改成了creatList2*/。
output(r);
//a=Get(r,i);
// printf("%d\n",a);。
//b=Locate(r,x);。
//printf("%d\n",b);。
len=length(r);。
printf("list length = %d\n",len);。
//r=Insert(r,x,i);。
//output(r);
//r=Delete(r,i);。
//output(r);