【数据结构】线性结构——插入

   前面几篇博客,小编以线性结构为例,对数据结构的定义进行了简单介绍,对数据结构常用算法中的初始化与判空也逐一进行了介绍,本篇博文,小编将和大家一起学习线性结构的插入操作。

链式存储

(一)单链表

这里写图片描述

//单链表插入结点
void InsertLinklist(LinkList head,DataType x,int i)
//在表head的第i个数据元素结点之前插入一个以x为值的新结点
{
    Node *p,*q;
    if(i==1)  q=head;
    else q=GetLinkList(head,i-1);   //读表元素,找第i个数据元素结点
    if(q==NULL)                     //第i-1个结点不存在
        exit("");
    else{
        p=malloc(sizeof(Node));P->data=x;//生成新结点
        p->next=q->next;                 //新结点链域指向*q的后继结点
        q->next=p;                       //修改*q的链域
    }   
}

(二)进栈

这里写图片描述

//进栈
void Push(LkStk *LS,DataType x)
{
    LkStk *temp;
    temp=(LkStk *)malloc(sizeof(LkStk));//temp指向申请的新结点
    temp->data=x;                       //新结点的data域赋值为x
    temp->next=LS->next;                //temp的next域指向原来的栈顶结点
    LS->next=temp;                      //指向新的栈顶结点
}

(三)入队

这里写图片描述

//入队
void Enqueue(LkQue *LQ,DataType x)
{
    LkQueNode *temp;
    temp=(LkQueNode *)malloc(sizeof(LkQueNode));
    temp->data=x;
    temp->next=NULL;
    (LQ->rear)->next=temp;  //新结点入队列
    LQ->rear=temp;          //置新的队列尾结点
}

顺序存储

(一)顺序表

//顺序表插入元素
void InsertSeqlist(SeqList L,DataType x,int i)
//将元素x插入到顺序表L的第i个数据元素之前
{
    if(L.length==Maxsize)  exit("表已满");
    if(i<1||i>L.length+1)  exit("位置错");//检查插入位置是否合法
    for(j=L.length;j>=i;j--)              //初始j=L.length
        L.data[j]=L.data[j-1];            //依次后移
    L.data[i-1]=x;                        //元素x置入到下标为i-1的位置
    L.length++;                           //表长度+1
}

(二)进栈

//进栈
int push(SeqStk *stk,DataType x)
//若栈未满,元素x进栈stk中,否则提示出错信息
{
    if(stk->top==maxsize-1)          //判断栈是否满
        {error("栈已满");return 0;}
    else{
        stk->top++;                  //栈未满,top值加1
        stk->data[stk->top]=x; //元素x进栈 return 1; } }

(三)入队

//入队
int Enqueue(CycQue CQ,DataType x)
{
    if((CQ.rear+1)%maxsize==CQ.front)   
        {error("队已满");return 0;}    //队列满,入队列失败
    else{
        CQ.rear=(CQ.rear+1)%maxsize;
        CQ.data[CQ.rear]=x;            //入队列成功
        return 1;
    }
}
相关文章
相关标签/搜索