链栈和链队列的结构体代码及基本操作代码

链栈的结构体代码

创建链栈

typedef struct node //用于创建链栈的结构体 
{
	int data;//存放数据
	struct node*nextPtr;
 } Stack,*LinkStack;

压入元素

void PushStack(LinkStack &top,int e)//向栈中压入一个元素 
{
 	LinkStack p=(LinkStack)malloc(sizeof(Stack));//分配新空间
 	if(p==NULL)//分配失败 
		printf("There is an error.\n");
 	p->data=e;
 	p->nextPtr=top;
 	top=p;
} 

弹出栈

int PopStack(LinkStack &top)//把一个元素从栈里面弹出来
{
  	LinkStack p=NULL;//用以暂存top,便于释放 
  	int e;
  	if(!top)
  		return 0;
  	e=top->data;//取值 
  	p=top; 
	top=top->nextPtr;//下移 
	free(p);
	return e;
}

链队列的结构体代码

typedef struct node_2//定义队列的每一个节点 
{
        char data;
        struct node_2* next;
}Node;
typedef struct Queue//定义队列 
{
        Node* front;
        Node* rear;
}Queue;

队列初始化

Queue* QueueInit()//队列初始化 
{
	Queue*q=(Queue*)malloc(sizeof(Queue));
	q->front = NULL;
    q->rear = NULL; 
    return q;
}

入队

void QueuePush(Queue* &q, char data)//入队 
{
    Node * p = (Node *)malloc(sizeof(Node));
    if(p == NULL)//内存分配失败
    printf("ERRO\n");
    else
    {
    	p->data = data;
    	p->next = NULL;
    	if(q->rear == NULL) //队列中还没有节点 
    	{
        	q->front = p;
        	q->rear = p;
    	}
		else// 队列中已有节点 
		{
       		q->rear->next = p;//让p成为当前的尾节点下的一节点
        	q->rear= p;//更新尾指针
    	}
	}
}

出队

char QueuePop(Queue* &q)//出队 
{
	Node * p = q->front;//暂存队首 
	char d;
	if(q->front)//判空 
	d=p->data;
	q->front = q->front->next;//指针下移,更新队首 
	free(p);//释放空间 
	return d;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值