- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表的顺序表示
程序2_1.c提供了顺序存储结构下线性表的实现。第1行定义了一个常数值MAXSIZE。它是一个常数,表示线性表的最大长度。第2行把ELEMTYPE设置为int的一个别名。这样,这个例子就可以使用一组整数了。第3行到第7行包含了线性表的说明。接下来从第8行到第46行线性表运算函数的定义。
第8到第11行将线性表置成空表,只需简单地将线性表元素个数置成0即可。由于线性表的长度已经记录在结构成员length中,因此求线性表的长度(第35行到第38行)只是返回 length的值。
第20到第24行是追加函数,函数append在线性表的表尾插入一个元素。
第12行到第19行是插入函数。在表中第i位置插入一个新元素item时,需将i,i+1,…,n-1位置上的元素向后移,变成编号为i+1,i+2,…,n,然后将item插入到第i个位置,且线性表的长度加1。
第25行到第34行是删除元素。要删去表中位置i上的元素,同样需要移动表中元素,使原编号为i+1,i+2,…,n-1的元素变成编号为i,i+1,…,n-2,并将表的长度减1。
第39行到第46行的函数find在线性表中查找第一个出现的值为item的元素。如果值item找到了,函数返回元素item所在位置1,否则返回-1。
第54行到第67行是main函数的一个例子,说明了线性表的使用。57行调用clear 函数将线性表清空,第58,59,60三行调用append函数追加三个元素,第62行在位置2插入一个元素15,第65行调用delete函数删除位置3的元素。
第47行到53行的print函数是为了显示线性表中的数据而设置的。
程序2_1.c
1 #define MAXSIZE 999
2 typedef int ELEMTYPE;
3 struct list {
4 ELEMTYPE listarray[MAXSIZE];
5 int length;
6 };
7 struct list l;
8 void clear()
9 {
10 l.length = 0;
11 }
12 void insert(int pos ,ELEMTYPE item)
13 {
14 int i;
15 for(i = l.length;ipos;i--)
16 l.listarray[i] = l.listarray[i-1];
17 l.listarray[pos] = item;
18 l.length++;
19 }
20 void append(ELEMTYPE item)
21 {
22 l.listarray[l.length++] = item;
24 }
25 ELEMTYPE delete(int pos)
26 {
27 int i;
28 ELEMTYPE temp;
29 temp = l.listarray[pos];
30 for(i = pos;il.length-1;i++)
线性表的链式表示
程序2_2.c提供了链式存储结构下线性表的实现。第3行到第8行包含了线性表中结点的说明,其中element表示数据域,存放该结点的数据信息,next为指针域,指明该结点的唯一后继结点在内存中的存放地址,或是在该结点序列中所在的物理位置。线性链表由head和tail表示。接下来从第9行到第76行线性表运算函数的定义。第9行到第14行初始化单链表。head指针与tail指针指向表头结点。
在单链表的最后一个结点后插入一个结点只要将单链表尾指针tail指向新插入结点,新插入结点成为最后一个结点即可。第15行到第20行函数append实现追加一个新结点到单链表的最后,新结点的元素值为item。malloc是C语言提供的标准函数,其功能是申请存储空间。
设p是指向单链表中一个结点的指针,在p指向的结点后面插入一个结点包括三个步骤。首先,要创建一个新的结点,并且赋给它一个新的值。其次,新结点的next指向指针p指向结点的后继结点。第三,指针p指向的结点的next要指向新插入的结点。
第21行到第38行函数insert实现在单链表的第i个结点前面插入一个新结点。新结点的元素值为item,s为指向新结点的指针。算法在实现时,首先查找新结点插入位置,然后根据上面所述修改相应指针。
从单链表删去一个结点只需将被删结点的前趋结点的next域指向被删结点的后继结点即可。但必须注意,被删结点占据的内存空间应该返回给存储器。因此可设一个临时指针指向要删去的结点,而后调用C语言提供的标准过程free将被删去的结点占据的内存空间返回给存储器。第39行到第57行的函数delete实现删除结点运算。
第58行到第65求单链表中所含结点的个数。为求单链表的结点个数,我们必须从单
文档评论(0)