线性表的基本操作

线性表的结构体定义
顺序表结构体定义
#define maxsize 100

typedef struct
{
int data[maxsize];//定义一个存放结构体的数组,这个数组有自己的最大容量
int length;//这里定义一个长度,这个长度可以理解为有效长度,比如有100个房间但不一定需要100个房间里面都有人。
}

一个顺序表包括一个存储表中元素的数组data[ ]和一个指示元素个数的length。
2.单链表结点定义

typedef struct LNode
    { 
int data;   
struct LNode *next;   
}LNode;

3.双链表的结点定义

typedef  struct  LNode
{
int data;
struct DLNode *prior;
struct DLNode  *next;
}

结点是内存中一片由用户分配的存储空间,只有一个地址来表示他的存在,没有显示的名称,因此我们会在分配链表结点空间的时候,同时定义一个指针,来存储这片空间的地址,并且常用指针的名称来作为结点的名称

LNode *A=( LNode * )malloc(sizeof(LNode));

1>用户分派了一片LNode型空间,也就是构造了一个LNode型的结点。这个A定义了两个东西:一个是结点,一个是指针(并且这个指针指向后继元素的的存储单元)。
2>在链表中必须搞清每一个东西,在后面的 各种表示中才能反应迅速。当出现“p指向q”的时候你就知道此时,p代表的是指针,因为结点不能指向结点。当用函数free()释放p的空间的时候,此时p代表结点,因为p即是指针又是结点,但是指针变量自身所需要的存储空间是系统分配的,不需要用户调用free()来释放,只用用户分配的存储空间才需要用户自己来释放。
顺序表操作.

1.按元素值的查找的方式
在顺序表中查找一个值等于e的元素,并返回其下标

int Findelem (Sqlist L,int e)
{
int i;
for(i=0;i<L.length;++i)
    {
     if(e==L.data[i])
      return i;
    }
  return  -1;
}    

2.插入元素的代码
在顺序表L的第p个位置上插入新的元素e,(0<L<length)

int InsertElem (Sqlist &L,int p,int e)
{
int i;
if (p<0||p>L.length||L.length==maxsize)//对p的位置进行限制,要么位置错误,要么线性表已经饱和。
return 0;
for(i=L.length;i>=p;--i)
L.data[i+1]=L.date[i];
L.data=e;
++(L.length);
return 1;
}

3.删除顺序表L下标为p的元素,,成功返回1,否则返回0,将删除元素的值赋给e。

int DeleteElem (Sqlist &L,int p,int &e)
{
int i;
if(p<0||p>L.length-1)
return 0;
e=L.data[p];
for(i=p;i<L.length;++i)
{
L.data[i]=L.data[i+1];
}
--(L.length);
return 1;
}
//要删除表中下标为p的元素,只需要将其后面的元素逐个往前移动,将p上的元素覆盖掉,再由后面的元素把前面的元素覆盖掉即可。

**1)**初始化顺序表的算法,只需要将length设置成0,即可。

void initlist (Sqlist &L)
{
L.length=0;
}

**2)**求指定位置元素的算法

int getelem (Sqlist L,int p ,int &e)
{
  if(p<0||p>L.length-1)
    return 0;
    e=L.data[p];
    return 1;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值