1.顺序队
//创建一个顺序队
link* chuang(){
link*haed=(link*)malloc(sizeof(link));
if(haed==NULL){
printf("创建失败");
return NULL;
}
haed->next=0;
haed->tpye=0;
return haed;
}
//判满
int panduan(link*haed){
return (haed->tpye+1)%(n+1)==haed->next ?1:0;
}
//入队
void rdui(link*haed,datatpye sun){
if(panduan(haed)==1){
printf("顺序栈以满\n");
return;
}
haed->ddta[haed->tpye]=sun;
haed->tpye=(haed->tpye+1)%(n+1);
return;
}
//判空
int pankong(link*haed){
return haed->tpye==haed->next ?1:0;
}
//出队
datatpye cdui(link*haed){
if(pankong(haed)==1){
printf("顺序栈为空");
return (datatpye)-1;
}
datatpye p=haed->ddta[haed->next];
haed->next=(haed->next+1)%(n+1);
return p;
}
//计算个数
int jishuan(link*haed){
return (haed->tpye-haed->next+(n+1))%(n+1);
}
void bianli(link*haed){
for(int i=haed->next;i!=haed->tpye;i=(i+1)%(n+1)){
printf("%d ",haed->ddta[i]);
}
putchar(10);
return;
}
顺序队的实现
2.顺序栈
link* chuangjian(){
link*haed=(link*)malloc(sizeof(link));
if(haed==NULL){
printf("创建失败\n");
return NULL;
}
haed->pos=0;
return haed;
}
//判满
int panman(link*q){
return q->pos == n?1:0;
}
//入栈
void cha(link*haed,datatype sun){
if(panman(haed)){
printf("顺序栈为满\n");
return;
}
haed->data[haed->pos]=sun;
haed->pos++;
return;
}
//判空
int pankong(link*q){
return q->pos == 0?1:0;
}
//出栈
int chu(link*haed){
if(pankong(haed)==1){
printf("顺序栈为空\n");
}
haed->pos--;
return haed->data[haed->pos];
}
void bianli(link*haed){
for(int i=0;i<haed->pos;i++){
printf("%d ",haed->data[i]);
}
putchar(10);
return;
}
实现
3.双向链表
link* toujiedian(){
link*haed=(link*)malloc(sizeof(link));
if(haed==NULL){
printf("创建失败\n");
return NULL;
}
haed->msg.len=0;
haed->next=NULL;
haed->prve=NULL;
return haed;
}
//头插法
void toucha(link*haed,datatype n){
link*p=(link*)malloc(sizeof(link));
if(p==NULL){
printf("创建失败\n");
return;
}
p->msg.data=n;
p->next=NULL;
p->prve=NULL;
if(haed->next==NULL)
{p->next=haed->next;
haed->next=p;
p->prve=haed;
}
else{
p->next=haed->next;
haed->next=p;
p->next->prve=p;
p->prve=haed;
}
haed->msg.len++;
return;
}
//尾插
void weicha(link*haed,datatype n){
link*temp=(link*)malloc(sizeof(link));
if(temp==NULL){
printf("创建失败\n");
return;
}
temp->msg.data=n;
temp->next=NULL;
temp->prve=NULL;
link*p=haed;
while(p->next!=NULL){
p=p->next;
}
temp->next=p->next;
p->next=temp;
temp->prve=p;
haed->msg.len++;
return;
}
//按位置插入
void anweizhicha(link*haed,int x,datatype n){
if(x<1||x>haed->msg.len+1){
printf("插入位置非法");
return;
}
link*temp=(link*)malloc(sizeof(link));
if(temp==NULL){
printf("创建失败\n");
return;
}
temp->msg.data=n;
temp->next=NULL;
temp->prve=NULL;
link*p=haed;
for(int i=0;i<x-1;i++){
p=p->next;
}
if(p->next==NULL){
temp->next=p->next;
p->next=temp;
temp->prve=p;
}
else{
temp->next=p->next;
p->next=temp;
temp->next->prve=temp;
temp->prve=p;
}
haed->msg.len++;
return;
}
//头删
datatype toushan(link*haed){
if(haed->next==NULL){
printf("链表为空");
return (datatype)-1;
}
link*p=haed->next;
if(p->next==NULL){
haed->next=NULL;
}
else{
haed->next=p->next;
p->next->prve=haed;
}
datatype n=p->msg.data;
free(p);
haed->msg.len--;
return n;
}
//尾删
datatype weishan(link*haed){
if(haed->next==NULL){
printf("链表为空");
return (datatype)-1;
}
link*p=haed;
while(p->next!=NULL){
p=p->next;
}
p->prve->next=NULL;
datatype n=p->msg.data;
free(p);
haed->msg.len--;
return n;
}
//按位置删
datatype anweishan(link*haed,int n){
if(n<1||n>haed->msg.len){
printf("删除位置有误");
return (datatype)-1;
}
if(haed->next==NULL){
printf("链表为空");
return(datatype)-1;
}
link*p=haed;
for(int i=0;i<n;i++){
p=p->next;
}
if(p->next==NULL){
p->prve->next=NULL;
}
else{
p->prve->next=p->next;
p->next->prve=p->prve;
}
datatype x=p->msg.data;
free(p);
haed->msg.len--;
return x;
}
//遍历
void bianli(link*haed){
link*p=haed;
while(p->next!=NULL){
p=p->next;
printf("%d ",p->msg.data);
}
printf("\n");
return;
}
实现