前面几篇博客,小编以线性结构为例,对数据结构的定义进行了简单介绍,对数据结构常用算法中的初始化与判空也逐一进行了介绍,本篇博文,小编将和大家一起学习线性结构的插入操作。
链式存储
(一)单链表
//单链表插入结点
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,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;
}
}
原文链接:https://www.f2er.com/datastructure/382262.html