数据结构栈和队列

1、思维导图

https://www.zhixi.com/view/a0aae8eb

2、链式队列

link_seq.h

#ifndef __LINK_H__
#define __LINK_H__

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef int datatype;
typedef struct Seq
{
	union
	{
		datatype data;
		int len;
	};
	struct Seq *next;
}seq,*pseq;

typedef struct P
{
	pseq f;
	pseq w;
}p,*pp;

pp create_head();//创建头
pseq create_node(datatype data);//创建节点
int rudui(pp q,datatype data);//入队
int output(pp q);//遍历
int weicha(pp q,datatype data);//尾插
int chudui(pp q);//出队
#endif





link_seq.c

#include "link_seq.h"

pp create_head()//创建头
{
	pseq h=(pseq)malloc(sizeof(seq));
	if(h==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}

	h->len=0;
	h->next=NULL;

	pp q=(pp)malloc(sizeof(p));
	if(q==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}

	q->f=h;
	q->w=h;
	return q;
}

pseq create_node(datatype data)//创建节点
{
	pseq new=(pseq)malloc(sizeof(seq));
	if(new==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}

	new->data=data;
	new->next=NULL;
	return new;
}

int rudui(pp q,datatype data)//入队
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return -1;
	}

	pseq new=create_node(data);
	q->w->next=new;
	q->w=new;
	q->f->len++;
	return 0;
}

int weicha(pp q,datatype data)//尾插
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return -1;
	}

	pseq new=create_node(data);
	new->next=q->f->next;
	q->f->next=new;
	q->f->len++;
	return 0;
}

int chudui(pp q)//出队
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return -1;
	}

	if(q->f->next==NULL)
	{
		printf("链队为空\n");
		return 0;
	}

	pp p=q;
	while(q->f->next!=NULL)
	{
		printf("出队的是%d\n",q->f->next->data);
		free(q->f->next);
        p->f->next=q->f->next->next;
		p->f->len--;
    }
	q=p;
	if(q->f->len==0)	
		q->w=q->f;
	return 0;
}

int output(pp q)//遍历
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return -1;
	}

	if(q->f->next==NULL)
	{
		printf("链队为空\n");
		return 0;
	}

	pp p=q;
	while(q->f->next!=NULL)
	{
		printf("%d\t",q->f->next->data);
		q->f=q->f->next;
	}
	printf("\n");
	q=p;
	return 0;
}

3、递归

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int digui(int x)
{
	if(x==0)
		return 0; 
	int i,j;
	i=x%10;
	j=x/10;
	printf("%d\n",i);
	return digui(j);
}
int main(int argc, const char *argv[])
{
	int x;
	printf("输入一个数:");
	scanf("%d",&x);
	digui(x);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值