求编程高手用c语言编写链栈完整源代码

求编程高手用c语言编写链栈完整源代码,第1张

/****************************************************************************************

实现链栈各种基本运算的算法 *

编写程序实现链栈种基本运算,并在此基础上设计一个主程序完成如下功能:

1、 初始化栈

2、 判断栈是否为空

3、 依次进栈a,b,c,d,e元素

4、 判断栈是否为空

5、 输出栈的长度

6、 输出从栈顶蚂凳册到栈底元素

7、 输出出栈序列

8、 判断栈是否为空

9、 释放栈/

*********************************************************************************************/

#include<iostream.h>

#include<stdlib.h>

#include<stdio.h>

#define OVERFLOW -2

#define ok 1

#define STACK_INIT_SIZE 100 //存粗物储空间初始分配量

#define STACKCREMENT 10//增加分量

typedef struct{

char *base

char *top

int stacksize//当前分配的空间

int lenght

}SqStack //Sqlist

/*********************************初始化栈*************************************/

int InitStack(SqStack &S)

{

S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char))// 分配存储闷宏空间

if(!S.base) exit(0)

S.top=S.base

S.stacksize=STACK_INIT_SIZE

S.lenght=0

return 1

}

/******************************************************************************/

/********************************判断栈是否为空******************************/

bool StackEmpty(SqStack&S){

if(S.top==S.base)return 1

else

return 0

}

/*****************************释放栈********************************/

int FreeStack(SqStack&S)

{

free(S.base)

S.top=S.base

return ok

}

/******************************************************************/

/*********************求出栈的长度*********************************/

int StackLenth(SqStack&S){

S.lenght=S.top-S.base

return S.lenght

}

/******************************************************************/

/**********************入栈*****************************************/

int Push(SqStack &S,char e){

if(S.lenght>=S.stacksize){

S.base=(char*)realloc(S.base,(S.stacksize+STACKCREMENT)*sizeof(char))//增加分配存储

if(!S.base) exit(OVERFLOW)

S.top=S.base+S.stacksize

S.stacksize+=STACKCREMENT

}

*S.top++=e

S.lenght++

return ok

}

/**************************************************************/

/****************************出栈****************************/

char Pop(SqStack&S,char &e){

if(S.base==S.top)

return 0 //当栈为空时,返回错误

else

e=*--S.top

S.lenght--

return e

}

/*************************显示*******************************/

void DispStack(SqStack S)

{

int i

for(i=S.lenghti>0i--)

{

printf("%c",*(--S.top))

}

printf("\n")

}

//*******************主函数************************************/

int main(){

int i

SqStack Lst

char a,b,c,d,e,f

char g

printf("初始化栈:\n")

InitStack(Lst)

printf("依次进栈元素a,b,c,d,e,f\n")

cin>>a>>b>>c>>d>>e>>f

Push(Lst,a)

Push(Lst,b)

Push(Lst,c)

Push(Lst,d)

Push(Lst,e)

Push(Lst,f)

printf("打印\n")

DispStack(Lst)

int l=StackLenth(Lst)

cout<<"栈的长度为"<<l<<endl

printf("出栈序列:")

for(i=1i<=6i++)

{

Pop(Lst,g)

printf("%c ",g)

}

printf("\n")

printf("栈为:%s\n",(StackEmpty(Lst)?"空":"非空"))

printf("释放栈\n")

FreeStack(Lst)

return 0

}

可以正确运行,你看下可以不??希望能帮到楼主! 我用visual C++6.0编译的,现在主流都是用这个,不好意思,WINTC我没有用过,楼主可以自己改吗??

额,你们老师太不人道了,WINTC好像在后面得加一个getch()吧??这个软件我没有用过

typedef struct node

{ ElemType data

struct node *next

} LinkStack

⑴置空栈

void InitLinkStack( LinkStack * &s)

{ s=NULL

}

⑵判栈空

int IsEmptyLinkStack(LinkStack *s )

{ if(s==NULL)

return 1

else

return 0

}

⑶ 入栈/*将元素x插入链栈top的栈顶*/

void PushLinkStack(LinkStack* &s , ElemType x)

{ LinkStack *p

p=malloc(sizeof(LinkStack))/*生成新结点*s */

p->data=x

p->next=s

s=p

}

⑷出栈/*删除链栈top的栈顶结点*/

int PopLinkStack (LinkStack* &s, ElemType &x)

{ LinkStack *p

if(s==NULL) return 0

x = s->data/*将栈顶数据存入*x */

p = s/*保存栈顶结点地址*/

s = s->next/*删除郑毕原栈顶结点*/

free (p)/*释放原栈顶结点*/

return 1/*返回新栈顶指针*/

}

(5) 取栈顶元素

int GetLinkStackTop (LinkStack* s, ElemType &x)

{

if(s==NULL) return 0

x = s->data/*将栈顶数据存入*x */

return 1/*返历悄回新栈顶指针*/喊烂芹

}

主函数怎么写吧

给题主一个包含建栈、入栈、出栈的代码吧

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#define elemType int /*元素类型*/

#define status int

#define OVERFLOW -1

#define ERROR 0

#define OK 1

typedef struct sNode {

elemType data

struct sNode *next

} sNode

typedef struct {

sNode *top /*栈顶指针*/

int length /*栈中元素个数*/

} *SLink

/* 初始化 */

/*  *** 作结果:构造一个空的栈S */

void initStack (SLink *S) {

(*S) -> top = NULL /*栈顶指针的初始值为空*/

(*S) -> length = 0 /*栈中元素个数为0*/ 

}

/* 入栈 */

/*  *** 作结果:栈S插入元素e */

status push (SLink S, 洞数elemType e) {

sNode *p

    p = (sNode*)malloc (sizeof (struct sNode)) /*建立新节点*/

    if (!p) /*内存分配失败*/

        exit (OVERFLOW)

    p->data = e

    p->next = S->top /*链接到原来的栈顶*/ 

    S->top = p /*移动栈顶指针*/ 

    ++S->length /*栈的长度增加*/

    

    return OK

}

/*出栈*/

/*  *** 作结果:删除栈S栈顶元素,并由e返回其值 */

status pop (SLink S, elemType *e) {

sNode *q

if (!S->top)

        return ERROR

    else {

*e = S->top -> data /*返回栈顶元素*/ 

        q = S->top

        S->隐悔top = S->top -> next /*修改栈顶指针*/

        --S->length /*栈的长度减少*/

free (q) /*释放被删除的元素空间*/ 

return OK

    }

}

/* 输出栈 */

status stackPrint (SLink S) {

sNode *p = S->top /* p指向栈顶 */

while (p!=NULL) {

printf ("%d\t",p->data)

p = p->next

}

putchar ('\n')

return OK

}

int main (void) {

SLink S

elemType e

elemType a=1,b=2,c=3,d=4

initStack (&S)

/*入栈若干元素*/

push (S, a)

push (S, b)

push (S, 灶颤正c)

push (S, d)

puts ("入栈4个元素,此时栈内容为:")

stackPrint (S) 

/*出栈*/

pop (S, &e)

puts ("出栈1个元素,此时栈内容为:")

stackPrint (S)

getch () /*屏幕暂留*/

return 0 

}

运行结果


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12362634.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存