您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记:顺序表

2015-11-11 18:12 507 查看
1、定义

datatype data[MAXSIZE];

int last;

}SeqList;



2、初始化

SeqList *Init_SeqList()

{

SeqList *L;

L=(SeqList*)malloc(sizeof(SeqList));

L->last=-1;

return L;

}



3、调用主函数

main()

{

SeqList *L;

L=Init_SeqList();

}



4、插入

int Insert_SeqList(SeqList*L,int i,datatype x)

{

int j;

if(L->last==MAXSIZE-1)

{

printf("SeqList is enough!");

return -1;

}

if(i<1||i>L->last+2)

{

printf("your location is wrong!");

return 1;

}

for (j=L->last;j>=i-1;j--)

L->data[j+1]=L->data[j];

L->data[i-1]=x;

L->data++;

return 0;

}



5、删除

int Delete_SeqList(SeqList *L,int i)

{

int j;

if(i<1||i>L->last+1)

{

printf("there isn't the location!");

}

for(j=i;j<=L->last;j++)

L->data[j-1]=l->data[j];

L->last--;

return 1;

}



6、按值查找

int Location_SeqList(SeqList *L, datatype x)

{

int i=0;

while(i<=L.last&&L->data[i]!=x)

i++;

if(i>L->last)

return -1;

else

return i;

}

或者

int Location_SeqList(SeqList *L,datatype x)

{


for(i=0;i<=L.last&&L->data[i]!=x;i++)

if(i>L->last)

return -1;

else

return i;

}



心得:

1、线性表(a1,a2,a2,........an)与指针地址不一样。

a1对应于L->data[0]

2、每个操作前要设变量 int j;

3、合法判断

i<1||i>last+1或者i<1||i>last+2

判满

L->last==MAXSIZE-1;

4、最后不要忘了表的最后元素

L->last++;

5、对于变量设几个的问题,我觉得看需求,插入删除查找都一般设一个,比较啥的一般两三个,分情况。

6、L.data[i]和L->data[i]有什么区别

c语言问题喽,首先童鞋要知道数据结构中线性表分为顺序和链式两种,而“.”用于顺序表的属性的访问,而“—>”用于链表中属性的访问。举例,根据你给的表示来说,为了表述简单我们先将data[i]看成一个变量data而不是数组。我们定义一个顺序表:

typedef struct{

int *elem;

int data;

}SqList;

这时构造一个线性表L(语句:SqList &L)访问它的元素,就应该是L.data;对应的我们定义一个链表:

typedef struct Lnode{

int data;

struct Lnode *next;

}Lnode,*LinkList;

这时你构造一个链表L(语句:LinkList &L或者Lnode *L),访问时候就应该是L—>data。

至于data[i],要么就直接把变量定义成了数组,要么应该就是是定义了一个结构体数组,定义形式:struct data{

int a;

}Data
;

注意N的值应给定义好,题目是顺序表的定义也可以采用链表的定义,说白了就是一级一级的往下访问。然后你在上述顺序表和链表中加入Data data;然后就可以按形式访问,道理就这样形成了。

也就是在顺序表中用L.data[i]

链表中用L->data[i]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: