1、线性结构

一、定义

  • 1、存在唯一的 第一个和最后一个元素
  • 2、处理唯一性元素外,其余元素有且只有一个 直接前驱和直接后继元素

一、存储结构

1、线性结构

  • 1、逻辑上和物理上都是相邻的

  • 2、存储位置

  • LOC(ai)=LOC(a1)+(i−1)∗LLOC( a_i ) = LOC( a_1 ) +(i-1) * L LOC(ai)=LOC(a1)+(i1)L

  • 3、优点是查找、缺点是插入和删除

  • 4、插入元素需要移动元素的期望值
    Einsert=∑i=1n+1Pi∗(n−i+1)=1n+1∑i=1n+1Pi∗(n−i+1)=n2 E_{insert} = \sum_{i=1}^{n+1}{P_i*(n-i+1)} = \frac{1}{n+1} \sum_{i=1}^{n+1}{P_i*(n-i+1)} = \frac{n}{2}Einsert=i=1n+1Pi(ni+1)=n+11i=1n+1Pi(ni+1)=2n
    Pi为位置i插入新元素的概率 P_i 为位置i插入新元素的概率Pii

  • 5、插入元素需要移动元素的期望值
    Edelete=∑i=1nqi∗(n−i)=1n∑i=1n+1qi∗(n−i)=n−12E_{delete} = \sum_{i=1}^{n}{q_i*(n-i)} = \frac{1}{n} \sum_{i=1}^{n+1}{q_i*(n-i)} = \frac{n-1}{2} Edelete=i=1nqi(ni)=n1i=1n+1qi(ni)=2n1
    qi为删除第i个元素的概率 q_i 为删除第i个元素的概率qii

2、链式结构

  • 1、通过指针对节点进行访问
typedef struct node {
  int data ;
  struct node * next ;
}NODE , *LinkList ;
  • 2、操作
    在这里插入图片描述
  • 3、操作

/**在链表中查找 值为k 的元素 */
LinkList Find_List_Value(LinkList L, int k) {
  LinkList p;
  p = L->next; // 初始化临时指针   如果不进行初始化 ,会改变原指针 而且 链表带空的头结点
  while (p) // 只要p不为空往下找
  {
      if (p->data == k) // 说明找到了值
      {
          break;
      } else {
          p = p->next; // 往下继续找
      }
  }
  return p; // 如果找到了, 则p 是一个带有值得节点,如果没有找到,则 p 为NULL
}
  /**在链表中查找 第k个 的元素 */
LinkList Find_List_Site(LinkList L, int k) {
  LinkList p  ,int i ;
  p = L->next; // 初始化临时指针   如果不进行初始化 ,会改变原指针 而且 链表带空的头结点
  i = 1 ;
  while (p && i < k) // 只要p不为空往下找
  {
    p = p->next; // 往下继续找
    i ++ ;

  }
  if(p&& i == k){
      return p ;  // 如果找到了, 则p 是一个带有值得节点
  }
  return NULL; //如果没有找到,则 p 为NULL
}

 // 在第k 个位置插入值为value 
	int Insert_List(LinkList L, int k, int vlaue) {
  LinkList p, s;
  if (k == 1) { // 首插入
      p = L;
  } else {
      p = Find_List_site(L, k - 1);
  }
  if (!p) {
      return -1;
  } else {
      s = (NODE *)malloc(sizeof(NODE));
      if (!s) {
          return -1;
      }
      s->data = vlaue;
      s->next = p->next;
      p->next = s;
      return 0;
  }
 }

int Delete_LinkList(LinkList L ,int k){
   LinkList p, s;
   if (k == 1) { // 首插入
       p = L;
   } else {
       p = Find_List_site(L, k - 1);
   }
   if(!p || !p->next ){
       return -1 ;
   }
   s = p->next ;
   p->next = s->next  ;
   free(s) ;
   return 0 ;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值