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

来源:互联网 发布:淘宝海外购 编辑:程序博客网 时间:2024/06/07 06:51

栈的各项操作:

#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);//清空队列


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 mac玩刺客信条卡怎么办 阴部长了个疙瘩怎么办 两个人觉得累了怎么办 朋友把我拉黑了怎么办 下雨了怎么办我好想你 雨停怎么办我好想你 下雨天怎么办我好想你 天谕账号忘记了怎么办 天谕账号被冻结怎么办 促黄体生成素低怎么办 地暖家里太干燥怎么办 剑灵摧毁了东西怎么办 想打嗝打不出来怎么办 孩子满100天要怎么办 宝宝吃奶粉过敏了怎么办 1岁宝宝不喝奶粉怎么办 母乳不够宝宝不喝奶粉怎么办 宝宝吃奶粉上火了怎么办 我小孩不喝奶粉怎么办 2岁宝宝不喝奶粉怎么办 婴儿吃奶粉上火了怎么办 100天的宝宝咳嗽怎么办 40天的小孩咳嗽怎么办 40天的婴儿咳嗽怎么办 50天的婴儿咳嗽怎么办 宝宝20天感冒了怎么办 1个月宝宝咳嗽怎么办 40天的宝宝干咳怎么办 百天的宝宝咳嗽怎么办 50天的孩子咳嗽怎么办 百天宝宝咳嗽有痰怎么办 1岁半宝宝拉肚子怎么办 百天的宝宝拉肚子怎么办 激战2帧数三十多怎么办 太受欢迎了怎么办txt微 太受欢迎了怎么办网盘 太受欢迎了怎么办微盘 我太受欢迎了该怎么办h 我太受欢迎了该怎么办1 卡培他滨副作用怎么办 究极风暴4卡怎么办