欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链栈与链队列

程序员文章站 2022-07-14 13:10:07
...

链栈与链队列

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

链栈

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

#include<stdio.h>
#include<stdlib.h>
//定义结构体
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<stdio.h>
#include<stdlib.h>
//定义结构体
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;
	} 
}
相关标签: 链表 队列