顺序队列
//创建顺序表
seqlist* creat_seqlist()
{
seqlist* sq =(seqlist*)malloc(sizeof(seqlist));
if(sq==NULL)
{
printf("堆空间没有申请成功\n");
return NULL;
}
sq->head=0;
sq->tail=0;
return sq;
}
//顺序表的数据输入
void in_seqlist(seqlist*stru,datatype n)
{
if((stru->tail+1)%(N+1)==stru->head)
{
printf("顺序表已满\n");
}
else
{
stru->data[stru->tail]=n;
stru->tail++;
}
if(stru->tail==N+1)
{
stru->tail=0;
}
}
//顺序表的数据删除
datatype out_seqlist(seqlist*stru)
{
datatype data;
if(stru->head==stru->tail)
{
printf("顺序表为空\n");
}
else
{
data=stru->data[stru->head++];
}
if(stru->head==N+1)
{
stru->head=0;
}
return data;
}
//遍历输出
void show_seqlist(seqlist*stru)
{
if(stru->head==stru->tail)
{
printf("顺序表为空\n");
}
for(int n=stru->head;n!=stru->tail;n++)
{
if(n==N+1)
{
n=0;
}
// printf("head=%d,tail=%d,n=%d\n",stru->head,stru->tail,n);
if(n==stru->tail)
{
break;
}
printf("data[%d]=%d\n",n,stru->data[n]);
}
}
双向链表
//创在头地址
linklist* creat_linklist()
{
linklist* ld=(linklist*)malloc(sizeof(linklist));
if(ld==NULL)
{
printf("空间申请失败\n");
return NULL;
}
ld->next=NULL;
ld->next=NULL;
ld->txt.len=0;
return ld;
}
//头插法
void head_in(linklist*head,datatype num)
{
linklist*temp=(linklist*)malloc(sizeof(linklist));
if(temp==NULL)
{
printf("空间申请失败\n");
return;
}
if(head->next==NULL)
{
temp->txt.data=num;
temp->next=head->next;
temp->prev=head;
head->next=temp;
head->txt.len++;
return;
}
else
{
temp->txt.data=num;
temp->next=head->next;
head->next=temp;
temp->prev=temp->next->prev;
temp->next->prev=temp;
head->txt.len++;
}
}
//尾插法
void tail_in(linklist*head,datatype num)
{
linklist*temp=(linklist*)malloc(sizeof(linklist));
if(temp==NULL)
{
printf("空间申请失败\n");
return;
}
linklist*tail=head;
for(;tail->next!=NULL;)
{
tail =tail->next;
}
temp->txt.data=num;
temp->next=tail->next;
tail->next=temp;
temp->prev=tail;
head->txt.len++;
return;
}
//遍历
void show_linklist(linklist*head)
{
linklist*show=head;
for(;show->next!=NULL;)
{
show=show->next;
printf("%d\n",show->txt.data);
}
printf("链表长度:%d\n",head->txt.len);
return;
}
//头删
void dele_head(linklist*head)
{
if(NULL==head->next||NULL==head)
{
printf("链表为空,或者地址为空\n");
return;
}
linklist* temp=head->next;
head->next=temp->next;
if(NULL!=temp->next)
{
temp->next->prev=temp->prev;
}
free(temp);
head->txt.len--;
return;
}
//尾删
void dele_tail(linklist*head)
{
if(NULL==head->next||NULL==head)
{
printf("链表为空,或者地址为空\n");
return;
}
linklist*temp=head;
for(;temp->next->next!=NULL;)
{
temp=temp->next;
}
linklist*tail=temp->next;
temp->next=NULL;
free(tail);
head->txt.len--;
return;
}
//中间插入
void mind_in(linklist*head,int w,datatype num)
{
if(w<1||w>head->txt.len+1)
{
printf("插入位置有误");
return;
}
linklist*temp=head;
for(int n=0;n<w-1;n++)
{
temp=temp->next;
}
linklist*in=(linklist*)malloc(sizeof(linklist));
in->next=temp->next;
in->txt.data=num;
temp->next=in;
if(in->next==NULL)
{
in->prev=temp;
}
else
{
in->prev=in->next->prev;
in->next->prev=in;
}
head->txt.len++;
return;
}
//中间删除
void mind_out(linklist*head,int w)
{
if(w<1||w>head->txt.len)
{
printf("删除位置有误\n");
return;
}
linklist*temp=head;
for(int n=0;n<w-1;n++)
{
temp=temp->next;
}
linklist*out=temp->next;
temp->next=out->next;
if(temp->next!=NULL)
{
temp->next->prev=temp;
}
free(out);
head->txt.len--;
return;
}
顺序栈
//创建顺序表
seqlist* creat_seqlist()
{
seqlist* sq =(seqlist*)malloc(sizeof(seqlist));
if(sq==NULL)
{
printf("堆空间没有申请成功\n");
return NULL;
}
sq->num=0;
return sq;
}
//顺序表的数据输入
void in_seqlist(seqlist*stru,datatype n)
{
if(stru->num>=N)
{
printf("顺序表已满\n");
}
if(stru->num<N)
{
stru->data[stru->num++]=n;
// printf("num=%d\n",stru->num);
// stru->num++;
}
}
//顺序表的数据删除
datatype out_seqlist(seqlist*stru)
{
datatype data;
if(stru->num<=0)
{
printf("顺序表为空\n");
}
if(stru->num>0)
{
// printf("num=%d\n",stru->num);
data=stru->data[--stru->num];
}
return data;
}
//遍历输出
void show_seqlist(seqlist*stru)
{
if(stru->num<=0)
{
printf("顺序表为空\n");
}
for(int n=0;n<stru->num;n++)
{
printf("data[%d]=%d\n",n,stru->data[n]);
}
}
链式队列
//创造头节点
liandui* creat_liandui()
{
liandui* qp=(liandui*)malloc(sizeof(liandui));
if(NULL==qp)
{
printf("空间申请失败\n");
return NULL;
}
linklist* head=(linklist*)malloc(sizeof(linklist));
if(NULL==head)
{
printf("空间申请失败\n");
return NULL;
}
linklist* tail=head;
qp->head=head;
qp->tail=tail;
return qp;
}
//尾插
void tail_in(liandui*qp,datatype data)
{
linklist*temp=(linklist*)malloc(sizeof(linklist));
if(NULL==temp)
{
printf("空间申请失败\n");
return ;
}
temp->data=data;
temp->next=qp->tail->next;
qp->tail->next=temp;
qp->tail=qp->tail->next;
}
//判空
datatype pan_kong(liandui*qp)
{
if(qp->head==qp->tail)
{
printf("链队为空\n");
return (datatype)1;
}
return (datatype)0;
}
//头删
void head_out(liandui*qp)
{
if(pan_kong(qp))
{
printf("队列为空\n");
return;
}
linklist*temp=qp->head->next;
qp->head->next=qp->head->next->next;
if(NULL==qp->head->next)
{
qp->tail=qp->head;
}
return;
}
//遍历
void show_liandui(liandui*qp)
{
linklist*temp=qp->head->next;
while(temp!=NULL)
{
printf("%d\n",temp->data);
temp=temp->next;
}
return;
}