69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <malloc.h>
typedef struct STACK
{
int data;
struct STACK *next;
}Stack;
//初始化
void InitStack(Stack *&s)
{
s=(Stack *)malloc(sizeof(Stack));
s->next=NULL;
}
//释放栈
void ClearStack(Stack *s)
{
Stack *p=s->next;
while(p!=NULL)
{
free(s);
s=p;
p=p->next;
}
}
//判断栈是否为空
int StackEmpty(Stack *s)
{
return(s->next==NULL);
}
int length(Stack *s)
{
int i=0;
Stack *p;
p=s->next;
while(p!=NULL)
{
i++;
p=p->next;
}
return i;
}
//得到栈顶元素
int GetTop(Stack *S,int &e)
{
if(S->next==NULL)
return 0;
e=S->next->data;
return 1;
}
//入栈
void Push(Stack *s,int e)
{
Stack *p;
p=(Stack *)malloc(sizeof(Stack));
p->data=e;
p->next=s->next;
s->next=p;
}
//出栈
int Pop(Stack *s,int &e)
{
Stack *p;
if(s->next==NULL)
{
printf("空栈...\n");
return 0;
}
p=s->next;
e=p->data;
s->next=p->next;
free(p);
return 1;
}
//输出栈的元素
void OutputStack(Stack *s)
{
Stack *p;
p=s->next;
if(s->next==NULL) {
printf("空栈...\n");
return;
}
while(p!=NULL) {
printf("%4d",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
int e;
Stack *s;
printf("初始化栈:\n");
InitStack(s);
printf("依次进栈元素1,2,3,4,5\n");
Push(s,1);
Push(s,2);
Push(s,3);
Push(s,4);
Push(s,5);
printf("栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("栈的长度:%d\n",length(s));
printf("从栈顶到栈底的元素:");
OutputStack(s);
printf("出栈序列:");
while(!StackEmpty(s))
{
Pop(s,e);
printf("%d",e);
}
ClearStack(s);
system("pause");
}
/*
C++ Primer 9.42 P.302 栈适配器
编写程序读入一系列单词,并将它们存储在stack对象中,然后逆序输出。
*/
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
stack<string> sstack;
string str;
// 读入单词并存储在stack对象中
cout<<"Enter some words(Ctrl+Z to end):"<<endl;// 按两次"Ctrl+z"退出
while (cin>>str)
{
sstack.push(str);// 在栈顶压入元素
}
cout<<"The size of stack is: "<<sstack.size()<<endl;// 返回栈中元素的个数
if (sstack.empty())// 如果栈为空,则返回true,否则返回false
{
cout<<"The stack is empty"<<endl;
}
while(!sstack.empty())
{
str=sstack.top();// 返回栈顶元素,但不删除该元素
cout<<str<<endl;
sstack.pop();// 删除栈顶元素,但不返回其值
}
return 0;
}