您的位置:首页 > 其它

线性表--顺序实现方式

2013-04-04 16:01 239 查看
         线性表是最基本、最简单的、也是很常用的一种数据结构。线性表中数据元素的关系式一对一的

   关系,即是除了第一个和最后一个数据元素之外,其他数据元素都是首尾相接的。在实际中使用也是

   较为广泛的,接下来用顺序实现方式简单的对其进行一下模拟。

           源代码如下:

/**
@author Kiritor
顺序线性表的演示
*/

#include "stdafx.h"
#include<stdlib.h>
#include<conio.h>
#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
#include<malloc.h>
#define OK 1
#define OVERFLOW 0
typedef struct
{
int * element;//存储空间的基址
int length;//当前线性表的长度
int size ;//线性表的容量

}SqList;

/*初始化线性表*/
int init_SqList(SqList & l)
{
l.element = (int *)malloc(LIST_INIT_SIZE*sizeof(int));//分配地址空间,线性表的总共的容量情况
if(!l.element)
{
exit(OVERFLOW);//分配失败则退出程序
}
l.length=0;
l.size=LIST_INCREMENT;//线性表的初始容量
printf("%s\n","初始化线性表成功!");
return OK;
}
/*输出线性表的内容*/
void print_SqList(SqList &l)
{
int i=0;
printf("%s\n","线性表内容:");
for(i=0;i<l.length;i++)
{
printf("%d \n",*(l.element+i));
}
}
/*插入数据到线性表
i表示在第i个位置前面进行插入
i从1开始*/
int insert_SqList(SqList &l,int i,int element)
{
if(i<1||i>l.length+1)
return OVERFLOW;
if(l.length>=l.size)
{
//存储空间已满,重新进行分配
int * newbase = (int *)realloc(l.element,(l.size+LIST_INCREMENT)*sizeof(int));
l.element = newbase;
l.size += LIST_INCREMENT;
}
//开始进行插入的操作
int *q = &(l.element[i-1]);//q为需要插入的位置
int *p;
for(p=&(l.element[l.length-1]);p>=q;p--)
{
*(p+1)=*p;
}
*q  = element;
l.length++;
printf("%s%d\n","线性表插入",element);
return OK;

}
/*删除线性表的某个位置的元素
i表示要删除的元素的位置从1开始
element用来存放删除的元素*/
int delete_SqList(SqList &l,int i,int & element)
{
if(i<1||i>l.length)
{
return OVERFLOW;
}
int *p= &(l.element[i-1]);
element=*p;//将要删除的元素放入emlement中
printf("删除的元素是:%d\n",element);
int *q=l.element+l.length-1;
for(++p;p<=q;p++)
{
*(p-1)=*p;//后面的元素往前面移动
}
l.length--;
return OK;
}
int main(int argc, _TCHAR* argv[])
{   SqList l;
int emlement=0;
init_SqList(l);
insert_SqList(l,1,123);
insert_SqList(l,1,321);
insert_SqList(l,2,231);
print_SqList(l);
delete_SqList(l,2,emlement);
print_SqList(l);
_getch();

return 0;
}
          看一下结果图:

             


                以上就是线性表的顺序实现方式了,通过上述的代码实现可以看出的是线性表顺序存储结构的特点

         是逻辑上相连的两个元素在实际的物理地址上也是相邻的。因此对于其每个元素的存储位置的表示具有

         规律性、公式性。也就造成了其元素的读取十分方便,但是若要进行元素的删除,插入则需要移动大量

         的元素,这也是顺序实现的线性表的缺点吧。

                 后续会对其链式实现方式及其特点做些总结。Over!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  线性表 顺序实现