链栈与链队列

链栈与链队列

想想是该整理一下学长一钱不值的链栈与链队列的任务,,不知道自己这样写的有没有问题,符不符合原理,如果有什么问题,请大家能不吝赐教,帮忙斧正。

链栈

首先,我们先搞清楚,栈的原理就是现金后出,譬如往箱子里面放球,最先放进去的最后拿出来。下面给一下我臭臭的代码:

#include
#include
//定义结构体
struct node{
	int data;
	struct node* next;
};
int main()
{
//这是之前学过的创建链表的代码,就不阐述了
	struct node *head,*p,*q,*t;
	head=(struct node *)malloc(sizeof(struct node));
	head->next=NULL;
	int a,n;
	scanf("%d",&n);//输入n个数
	for(int i=0;i<n;++i){
	scanf("%d",&a);
		p=(struct node*)malloc(sizeof(struct node));
		p->data=a;
		head->next=p;
		if(head->next==NULL)
			p->next=NULL;
		else{ 
			p->next=q ;
		}
		q=p;
	}
	//打印创建的链表
		t=head->next;
		while(t!=NULL){
			printf("%d",t->data);
			t=t->next;
}
//链栈:先入后出,因此新入的数应该在头指针的后面
	for(int i=0;i<n;++i){
		scanf("%d",&a);
		p=(struct node*)malloc(sizeof(struct node));//给输入的数a创建一处空间
		p->data=a;
		head->next=p;//将头指针的位置指向新入栈的数
		if(head->next==NULL)
			p->next=NULL;//如果是第一个数那么入栈的数指向为空
		else{ 
			p->next=q ;//否则指向前一个数
		}
		q=p;//记录上一个入站的值
	}
	//打印链栈
		t=head->next;
		while(t!=NULL){
			printf("%d",t->data);
			t=t->next;
	}
## 链队列
队列即是先进后出,就像平时就餐排队一样,这里我模拟了一人入队就有一人出队的环境。
````c
#include
#include
//定义结构体
struct node{
	int data;
	struct node* next;
};
int main()
{
//创建链表
	struct node *head,*p,*q,*t;
	head=(struct node *)malloc(sizeof(struct node));
	head->next=NULL;
	int a,n;
	scanf("%d",&n);//输入n个数,从而创建一个长度为n的链表
	for(int i=0;i<n;++i){
		scanf("%d",&a);
		p=(struct node*)malloc (sizeof(struct node));
		p->data=a;
		p->next=NULL;
		if(head->next==NULL)
			head->next=p;
		else
			q->next=p;
		q=p;
	}
	printf("\n");
	//打印该链表
	t=head->next;
	while(t!=NULL){
		printf("%d",t->data);
		t=t->next;
	}
		//进入新元素
	while(scanf("%d",&a)&&a!=-1){//当输入的数不为-1则继续输入
		p=(struct node*)malloc(sizeof(struct node));//为新的数申请空间
		p->data=a;
		head->next=head->next->next;//让排在最前面的数出队列
	   	q->next=p;/*q因为经过上面创建来链表的过程,所以已经是整个队中最后一个
	   	让他指向新数*/
		p->next=NULL;//最后入队的数指向为空
		/*打印链表看是否完成操作,该为测试代码,可省去
		t=head->next;
		while(t!=NULL){
		printf("%d",t->data);
		t=t->next;
	}
	*/
	printf("\n");
	q=p;记录新入栈的元素
	} 
	//打印链表
	t=head->next;
	while(t!=NULL){
		printf("%d",t->data);
		t=t->next;
	} 
}

你可能感兴趣的:(链表,队列)