如何用C语言创建一个链栈,并进行操作 5分
1 思路: 主要是链表的插入和删除操作
2 代码
#include#includetypedef struct node{int data;struct node *next;}node_type;void push(node_type* &stack, int elem){node_type*node = (node_type*)malloc(sizeof(node_type));node->data = elem;node->next = stack;stack = node;}int pop(node_type* &stack){int elem = stack->data;node_type*node = stack;stack = stack->next;free(node);return elem;}bool IsEmpty(node_type* stack){return stack == NULL;}void display(node_type*stack){while (stack){printf("%d ", stack->data);stack = stack->next;}puts("");}void destroy(node_type*stack){while (!IsEmpty(stack)){pop(stack);}}int main(){puts("(1) 建立空链栈");node_type*stack = NULL;puts("\n(2) 调用进栈函数,将从键盘输入的数据元素逐个进栈,输入0结束;");int num;scanf("%d", &num);while (num != 0){push(stack, num);scanf("%d", &num);}puts("\n(3) 显示进栈后的数据元素");display(stack);puts("\n(4) 调用两次出栈函数,显示出栈后的数据元素");if (!IsEmpty(stack))printf("%d\n", pop(stack));if (!IsEmpty(stack))printf("%d\n", pop(stack));destroy(stack);getchar();getchar();return 0;}3 运行效果
编程实现链栈的入栈和出栈操作。 在线等着你哦!
#include#includetypedef struct Snode { int data;/*数据域*/ struct Snode *next;/*指针域*/ }SNODE,* LinkStack;/*其中SNODE为链栈中的结点类型名, LinkStack为指向结点的指针类型名*/ //////////////////LinkStack Push(LinkStack top,int e) /*将数据元素e压入到链栈top中,使其成为新的栈项元素*/ { LinkStack p; p=(LinkStack)malloc(sizeof(SNODE)); /*生成一个新的结点*/ if (!p) /*如果分配空间失败,则函数返回"OVERFLOW"*/ printf("Stack is Overflow\n"); p->data=e; /*新结点的数据域赋值*/ p->next=top; /*修改链使新结点插入到链表的头部,并成为新的栈顶元素*/ top=p; return top; } /////////////LinkStack Pop(LinkStack top, int * e) /*将链栈top中的栈顶元素从栈中删除,并用e返回其值*/ { LinkStack q; if (!top) /*如果栈空,则函数返回ERROR*/ printf("Stack is ERROR\n"); *e=top->data; /*将被删的栈顶元素的值保存在e中*/ q=top; /*用q记下待删的栈顶元素*/ top=q->next; /*修改链使待删结点从链中"卸下" ,此时被删结点的后继成为新的栈顶元素结点*/ free(q); /*释放被删结点的存储空间*/ return top;}/////////LinkStack Stack_display(LinkStack top){ int e; while(top) { e=top->data; printf("%4d",e); top=top->next; } return top;}/////////////////////void main(){ LinkStack top = 0; int i=0,n,e; printf("please input the length:");/*输入几个数*/ sca......余下全文>>
顺序栈与链式栈的区别
顺序栈的实现在于使用了数组这个基本数据结构,数组中的元素在内存中的存储位置是连续的,且编译器要求我们在编译期就要确定数组的大小,这样对内存的使用效率并不高,一来无法避免因数组空间用光而引起的溢出问题,二在系统将内存分配给数组后,则这些内存对于其他任务就不可用;而对于链栈而言,使用了链表来实现栈,链表中的元素存储在不连续的地址,由于是动态申请内存,所以我们可以以非常小的内存空间开始,另外当某个项不使用时也可将内存返还给系统。
呵呵希望采纳,具体请参考
参考资料:[hi.baidu.com]小绵羊与小排骨/blog/item/5fb2b468bcd32c7c0d33fabf.html
实现链式栈的基本操作:入栈、出栈、取栈顶元素、判定栈空、栈满。
#include
#include
#define NULL 0
typedef struct snode
{
int data;
struct snode *next;
}stack;
//
void push( stack **s,int x)
{
stack *p;
p=( stack *)malloc(sizeof(snode));
//cin> > x;
p-> data=x;
p-> next=*s;
*s=p;
}
//
void pop( stack **s )
{
stack *p;
int e = 0 ;
p=(stack *)malloc(sizeof(snode));
if(NULL == (*s))
cout < < "空战 ";
else
{
p=*s;
e=p-> data;
*s=p-> next;
cout < < "出栈的数是:\t " < }
free(p);
}
//
void print(stack **s)
{
//stack *s;
if( *s == NULL)
cout < < "空栈 ";
else if((*s)!=NULL)
{
cout < < "出栈的数是:\t " < <(*s)-> data < *s = (*s)-> next;
}
}
//
void stackempty(stack **s)
{
//stack *s;
if(*s == NULL)
cout < < "栈空 " < else
cout < < "栈非空 " < }
//
void main()
{
stack *s= NULL ;// = new stack();
int f,x,e;
puts( "输入1(入栈)或2(出栈)\n ") ;
cin> > f;
while(1)
{
switch (f)
{
case 1:
puts( "输入入栈的数:\t ") ;
cin> > x;
push(&s,x);
print(&s);
stackempty(&s);
break;
case 2:
......余下全文>>
C语言:1 编写一个程序实现顺序栈的各种基本运算 2 实现队列的链式表示和实现相关的基本操作(入队出队等) 10分
这个我会,可以帮你写!
利用顺序栈和链式栈分别栈实现十进制N和二进制数的转换。
你是猪啊。这都不会。。。你邮箱多少我发给你。。。
C语言数据结构实现链栈的入栈、出栈、删除与插入 10分
1、栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。2、例程:
#include #include #define Max 100typedef char T; typedef struct MyStack{ T aa[Max]; unsigned int p; } stack; //创建空栈stack* createEmptyStack(){ stack* st = (stack *)malloc(sizeof(stack)); int i=0; for(i=0;iaa[i]=0; st->p=0; return st; }; //栈判空int isEmpty(const stack* st){ if(st->p==0) return 1; else return 0;}; //求栈的大小unsigned int size(const stack* st){ return st->p;}; //push操作void push(stack* st,const T a){ st->p=st->p+1; if(st->p==Max) { printf("栈满\n"); st->p--; return; } st->aa[st->p]=a; }; //pop操作T pop(stack* st){ if(isEmpty(st)) { printf("栈空"); return NULL; } char t=st->aa[st->p]; st->p=st->p-1; printf("%c ",t); return t; }; //栈销毁void destroy(stack* st){ free(st);}; int main(){ stack* st = createEmptyStack(); if(isEmpty(st)) printf("MyStack is empty\n"); else printf("MyStack is not empty\n"); push(st,'a'); push(st,'b'); push(st,'c'); push(st,'d'); push(st,&......余下全文>>
编写程序实现对链栈的操作
#include#include#includetypedef int StackElementType;typedef struct LinkStackNode{ StackElementType data; struct LinkStackNode *next;}LinkStackNode;typedef struct{ struct LinkStackNode *top; //栈顶指针}LinkStack;void InitStack(LinkStack *s)//初始化链栈{ s->top=NULL; printf("\n已经初始化链栈!\n");}void ClearStack(LinkStack *s)//链栈置空{ s->top=NULL; printf("\n链栈被置空!\n");}void Push(LinkStack *s, StackElementType x)//入栈{ LinkStackNode *p; p=(LinkStackNode *)malloc(sizeof(LinkStackNode)); //建立一个节点 p->data=x; p->next=s->top; //由于是在栈顶Push,所以要指向栈顶 s->top=p; //插入}StackElementType Pop(LinkStack *s)//出栈{ StackElementType x; LinkStackNode *p; p=s->top; //指向栈顶 if (s->top==0) { printf("栈空,不能出栈!\n"); exit(-1); } x=p->data; s->top=p->next; //当前的栈顶指向原栈的next free(p); //释放 return x;}StackElementType GetTop(LinkStack *s)//取栈顶元素{ if (s->top==0) { printf("链栈为空,无栈顶元素!\n"); exit(-1); } return s->top->data;}void Disp(LinkStack *s)//链栈的遍历{ printf("\n当前链栈中的数据为:\n"); printf("=====......
数据结构:编写一个算法实现输出链栈中的所有元素(假设栈中元素的类型为char)
#include
#include
struct node{
int data;
struct node* pre;
};
void print(struct node *p)//打印链栈
{while(p)
{printf("%d ",p->data);
p=p->pre;
}
}
int main()
{int i;
struct node *p,*q;
for(i=1;i<11;i++)//1~10依次入栈
{p=(struct node*)malloc(sizeof(struct node));
if(i==1)p->pre=NULL;
else p->pre=q;
p->data=i;
q=p;
}
print(p);
return 0;
}
分别就栈的顺序存储结构和链式存储结构实现栈的各种基本操作。
顺序存储结构
#include
typedef char ElemType;
#define MaxSize 100
using namespace std;
typedef struct
{
ElemType data[MaxSize];
int top;
}sqStack;
void InitStack(sqStack *&s);//初始化栈
void ClearStack(sqStack *&s);//摧毁栈
int StackLength(sqStack *s);//返回栈的长度
bool StackEmpty(sqStack *s);//判断栈是否为空
int Push(sqStack *&s,ElemType e);//进栈
int Pop(sqStack *&s,ElemType &e);//出栈
int GetTop(sqStack *s,ElemType &e);//取栈顶元素
void DispStack(sqStack *s);//显示栈中元素值
int main()
{
return 0;
}
void InitStack(sqStack *&s)//初始化栈
{
s=new sqStack;
s->top=-1;
}
void ClearStack(sqStack *&s)//摧毁栈
{
delete s;
}
int StackLength(sqStack *s)//返回栈的长度
{
return (s->top+1);
}
bool StackEmpty(sqStack *s)//判断栈是否为空
{
return (s->top==-1);
}
int Push(sqStack *&s,ElemType e)//进栈
{
if(s->top==MaxSize-1)
return 0;
s->top++;
s->data[s->top]=e;
return 1;
}
int Pop(sqStack *&s,ElemType &e)//出栈
{
if(s->top==-1)
return 0;
e=s->data[s->top];
s->top--;
return 1;
}
int GetTop(sqStack *s,ElemType &e)//取栈顶元素
{
if(s->top==-1)
return 0;
e=s->data[s->top];
return 1;
}
void DispStack(sqStack *s)//显示栈中元素值
{
for(int i=s->top;i>=0;i--)
cout<data[i]<<" ";
cout<}
链式存储结构
typedef char ElemType;
typedef struct linknode
{
ElemType data;
struct linknode *next;
}LiStack;
void InitS......余下全文>>