自己编写栈和队列的声明和调用

栈的各项操作:

#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
struct stack initstack(struct stack S)//创建一个栈
{
S.head=(struct node*)malloc(sizeof(struct node));
S.head->next=NULL;
return S;
}
struct stack push(struct stack S,int count)//向栈中放元素
{
struct node*p;
p=(struct node*)malloc(sizeof(struct node));
p->next=NULL;
p->data=count;
p->next=S.head->next;
S.head->next=p;
S.size++;
return S;
}
int stackempty(struct stack S)//判空
{
if(S.head->next)
return 1;
else
return 0;
return 0;
}
int gettop(struct stack S)//获取栈顶的元素
{
if(!S.head->next)
return ;
struct node*p;
p=(struct node*)malloc(sizeof(struct node));
p=S.head->next;
return p->data;
}
struct stack pop(struct stack S)//清除栈顶的元素
{
struct node *p;
p=(struct node*)malloc(sizeof(struct node));
p=S.head->next;
S.head->next=p->next;
free(p);
S.size--;
return S;
}
int stacklength(struct stack S)//计算栈的长度
{
return S.size;
}
struct stack clearstack(struct stack S)//清空栈
{


while(S.head->next)
{
struct node*p;
p=S.head->next;
S.head->next=p->next;
free(p);
}
return S;
}

栈的头文件:

#include<stdio.h>
#include<stdlib.h>
struct node//指针结构体
{
int data;
struct node*next;
};
struct stack//栈的结构体
{
int size;
struct node*head;
};
struct stack initstack(struct stack S);//创立一个栈
struct stack push(struct stack S,int count);//向栈中放元素
int stackempty(struct stack S);//判空
int gettop(struct stack S);//获得栈顶的元素
struct stack pop(struct stack S);//清除栈顶的元素
int stacklength(struct stack S);//计算栈的长度
struct stack clearstack(struct stack S);//清空栈

队列的基本操作:

#include<stdio.h>
#include<stdio.h>
#include"queue.h"//自己调用自己的头文件,头文件中包括结构体,不再重新定义
struct queue initqueue(struct queue Q)//建立一个初始的队列,并且让他的长度等于0
{
Q.head=(struct node*)malloc(sizeof(struct node));
Q.head->next=NULL;
Q.tail=Q.head;
    Q.size=0;
return Q;
}
struct queue Qpush(struct queue Q,int count)//向队列之中放入新的元素
{
struct node*p;
p=(struct node*)malloc(sizeof(struct node));
p->next=NULL;
p->data=count;
Q.tail->next=p;
Q.tail=p;
Q.size++;//每次放一个新的元素,队列的长度加一
return Q;
}
int queueempty(struct queue Q)//判断队列是否为空,空的话返回0,,不是空的话返回1
{
if(Q.head->next)
return 1;
else
return 0;
return 0;
}
int Qgettop(struct queue Q)//获取队头的元素
{
if(!Q.head->next)
return ;
struct node*p;
p=(struct node*)malloc(sizeof(struct node));
p=Q.head->next;
return p->data;
}
struct queue Qpop(struct queue Q)//清除队头的元素
{
struct node *p;
p=(struct node*)malloc(sizeof(struct node));
p=Q.head->next;
Q.head->next=p->next;
free(p);
Q.size--;
return Q;
}
int queuelength(struct queue Q)//计算队列的长度
{
return Q.size;
}
struct queue clearqueue(struct queue Q)//清空队列
{


while(Q.head->next)
{
struct node*p;
p=Q.head->next;
Q.head->next=p->next;
free(p);
}
return Q;
}

队列的头文件:

#include<stdio.h>
#include<stdlib.h>
struct node//定义指针结构体
{
int data;
struct node*next;
};
struct queue//定义队列结构体
{
int size;
struct node*head;
struct node*tail;
};
struct queue initqueue(struct queue Q);//建立
struct queue Qpush(struct queue Q,int count);//放入元素
int queueempty(struct queue Q);//判空
int Qgettop(struct queue Q);//获得队头元素
struct queue Qpop(struct queue Q);//清除队头的元素
int queuelength(struct queue Q);//队列的长度
struct queue clearqueue(struct queue Q);//清空队列


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值