C语言顺序栈和链栈

C语言顺序栈

#include<iostream>
#define MAXSIZE 20
using namespace std; 
typedef struct {
	int data[MAXSIZE];
	int top;
}SqStack;
//初始化顺序栈 
void initStack(SqStack &S)
{
	S.top=-1;
}
//键入数据
void insertKeyData(SqStack &S,int n)
{
	for(int i=0;i<n;i++)
	{
		S.top++;
		cin>>S.data[S.top];	
	}	
} 
//访问栈内元素
void showData(SqStack S)
{
	for(int i = 0;i<S.top+1;i++)
		cout<<S.data[i]<<" ";
	cout<<"\n";
 } 
 //入栈
 void push(SqStack &S,int e)
 {
 	if(S.top==MAXSIZE-1) cout<<"栈满";
 	S.data[++S.top] = e;
  } 
  //出栈 
 void pop(SqStack &S) 
 {
 	if(S.top==-1) cout<<"栈空";
    int e = S.data[S.top--];
    cout<<"出栈的元素是:"<<e<<"\n";
 }
 //读取栈顶元素
  int getTop(SqStack S) 
  {
  	if(S.top==-1) return 99999;
  	return S.data[S.top];
  }
int main()
{
	SqStack S;
	initStack(S);
	cout<<"请输入你要插入值的个数:\n";
	int insertN;
	cin>>insertN;
	insertKeyData(S,insertN);
	showData(S);
	//入栈
	cout<<"请输入你要插入的值:\n";
	int insertE;
	cin>>insertE; 
	push(S,insertE);
	showData(S);
	//出栈
	cout<<"接下来进行出栈操作。。。。。\n"; 
	pop(S);
	//读取栈顶元素
	cout<<"栈顶元素为:"<<getTop(S)<<"\n"; 
	return 0;
 } 

C语言链栈

#include<stdio.h>
#include<stdlib.h>
#include<iostream>
//莲栈的定义 
typedef struct StackNode{
	int data;//结点的数据域
	struct StackNode *next;//结点的指针域
	 
}StackNode,*LinkStack;

void showData(LinkStack S){
	printf("栈内元素的值为:");	
	LinkStack p;
 	p=S;
 	while(p){
 		printf("%d ",p->data);
 		p=p->next;
	 }
	 printf("\n");
};
void InitSack(LinkStack &S){
	S = NULL;
} 

void insertData(LinkStack &S,int n){
	
	S = new StackNode;
	S = NULL;
	printf("请倒序输入要插入的值:\n");
	for(int i = 0;i<n;i++)
	{
		LinkStack p = new StackNode;
		scanf("%d",&(p->data));
		p->next = S;
		S = p;	
	}	
}
void Insert_H(LinkStack &S,int e){
	StackNode *p=(StackNode*)malloc(sizeof(StackNode));
	p->data = e;
	p->next = S;
	S = p;
}
void deleteTop(LinkStack &S)
{
	if(S==NULL) printf("栈空");
	int e = S->data;
	printf("要删除的值为:%d\n",e); 
	StackNode *p=(StackNode*)malloc(sizeof(StackNode));
	p = S;
	S = S->next;
	free(p);
	
}

int getLength(LinkStack S){
	int i = 0;
	while(S){
		S = S->next;
		i++;
	}
	return i;
}



int main(){
	LinkStack S;
	//初始化 
	InitSack(S);
	insertData(S, 3);
	showData(S);
	//入栈
	printf("请输入要插入的值:");
	int insertData;
	scanf("%d",&insertData);
	Insert_H(S,insertData); 
	showData(S);
	//删除栈顶元素 
	printf("删除栈顶元素。。。。。。\n");
	deleteTop(S); 
	printf("删除之后栈内元素为:\n");
	showData(S);
	printf("长度为:%d\n",getLength(S));
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值