浅知线性表

顺序表(似数组)

  • 优:通过下标直接存储。

  • 缺:长度不可加;插入和删除操作时,移动大量元素。

初始化

List P;//定义一个表为P
P = (List)malloc(sizeof(struct LNode));//分配线性表的空间
L->length = 0;//设置空线性表的长度为0

  • 在元素增加的位置及以后的元素全向后移动一个
int a[]={1,0,3,8,2,9};
int n= len(a);
for(int j=n;j>i;j--){//i为元素插入位置
    a[j]=a[j-1];//向后挪一位
    length++;//表长度加加
}

  • 删除后,后面的元素向前移
for(int j=i;j<=n;j++){//从删除位置到表尾
   a[j-1]=a[j];//向前挪一位(后一个代替前一个)
length--;//表长度减减
}

  • 按序号查值
for(int i=0;i<=n;i++){//下标
 if(e = a[i]){cout<<a[i];}//如果找到与值e匹配的下标,输出值
}
  • 按值找序号
int i=0;
while(i<n&&a[i]!=e)//查找元素
      i++;
if(i>=n)//一直找到表尾
      return 0;
else 
      return i+1;//返回序号,序号=下标+1

链表(单)

  • 优:插入和删除操作时,不移动元素,只需改变指针指向。

  • 缺:查找较慢。

初始化

P = (LinkNode)malloc(sizeof(LinkNode));
P->next = NULL;//创建头结点,其next域置为空

(1)中间插入

s->next = p->next;
p->next = s;

(2)头插法

s->next = L->next;//将s结点插入首节点之前,头结点之后
L->next = s;//头结点之后

(3)尾插法

r->next=s;//假设r始终指向尾结点,将s插入到结点r之后
r=s;//让s成为尾结点

q = p -> next;//q为待删结点,p为q的前结点
p -> next = q -> next;//删除操作,把p的下一个结点直接改成q的下一个结点
free(q);//释放删除掉的空间

  • 按序号查值
int j = 0;
LInkNode *p = L;//p指向头结点
if(i<=0)retrun false;
while(j<i&&p!=NULL)//遍历找第i个结点p
{
      j++;
      p=p->next;
}
if(p==NULL)
      return false;//遍历完还没找到
else
{
      e= p->data;//找到
      return turn;
}
  • 按值找序号
int i = 1;//序号从1开始
LInkNode *p = L->next;//创建头结点,指向首结点
while(p!=NULL&&p->data!=e)//查找值为e的结点,其序号为i
{
      p=p->next;
      i++;
}
if(p==NULL)//不存在时
      return(0);
else//找到值为e的点,返回其序号
      return(i);
原文地址:https://www.cnblogs.com/lushuang55/p/13620027.html