回 帖 发 新 帖 刷新版面

主题:求栈的链式结构

求栈的链式结构,实现栈的初始化,插入,删除,输出。


好比如下的栈的顺序结构:


#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef int ElemType;
typedef struct {
    ElemType elem[MAXSIZE];
    int top;
}SqStack;
void OutStack(SqStack p);
void InitStack(SqStack *p);
void Push(SqStack *p,ElemType x);
ElemType Pop(SqStack *p);
ElemType GetTop(SqStack p);
void main()
{SqStack q;
int y,cord;   ElemType a;


do{printf("\n");
printf("\n       主菜单\n");
printf("\n     1   初始化顺序栈   \n");
printf("\n     2   插入一个元素   \n");
printf("\n     3   删除栈顶元素    \n");
printf("\n     4   取栈顶元素     \n");
printf("\n     5   结束程序运行    \n");
printf("\n----------------------------\n");
printf("请输入您的选择(1,2,3,4,5)");
scanf("%d",&cord);
switch(cord)
{  case 1:{InitStack(&q);    OutStack(q);
} break;
case 2:{printf("\n  请输入要插入的数据  a=");scanf("%d",&a);
    Push(&q,a);   OutStack(q);
       }break;
case 3:{a=Pop(&q);printf("\n   a=%d",a);
    OutStack(q);
       }break;
case 4:{y=GetTop(q);printf("\n    y=%d",y);
    OutStack(q);
       }break;
case 5:exit(0);
}
}while(cord<=5);
}


void InitStack(SqStack *p)
{p->top=0;
}
void Push(SqStack *p,ElemType x)
{if(p->top<MAXSIZE-1){p->top=p->top+1; p->elem[p->top]=x;}
else printf("\n     Overflow!");
}



ElemType Pop(SqStack *p)
{ElemType x;
if(p->top!=0){x=p->elem[p->top];
p->top=p->top-1;
return(x);
}
else{printf("\n   Underflow!");
return(-1);
}
}


ElemType GetTop(SqStack p)
{ ElemType x;
if(p.top!=0){x=p.elem[p.top];
return(x);
}
else{printf("\n   Underflow!");
return(-1);
}
}

void OutStack(SqStack p)
{int i;
if(p.top==0)printf("\n  The Stack is NULL");
for(i=p.top;i>0;i--)
printf("\n %2d %6d",i,p.elem[i]);
}









回复列表 (共3个回复)

沙发

我是分文件做的:
linkstack.h
typedef struct LNode{
    SElemType data;
    struct LNode *next;
}LNode,*LinkStack;
Status InitStack(LinkStack & S);
int Length_S (LinkStack S);
Status StackEmpty (LinkStack S);
Status Push (LinkStack & S,SElemType e);
Status Pop (LinkStack & s,SElemType & e);
int GetTop (LinkStack S,SElemType & e);
Status TraverseStack (LinkStack S);

linkstack.cpp
#include "preconst.h"
#include "linkstack.h"
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
Status InitStack(LinkStack & S){
    S=(LinkStack)malloc (sizeof (LNode));
    if (!S) exit (1);
    S->next=NULL;
    return OK;
}//InitStack
int Length_S(LinkStack S){
    LinkStack p=S->next;
    int j=0;
    while (p!=NULL){
        p=p->next;
        ++j;
    }
    return j;
}//Length_S
Status StackEmpty(LinkStack S){
    LinkStack p=S->next;

    if (p==NULL)
        return TRUE;
    else 
        return FALSE;
}
Status Push (LinkStack & S,SElemType e){
    LinkStack q;
    q=(LinkStack)malloc(sizeof (LNode));
    if (!q) exit(1);
    q->data=e;
    q->next=S->next;
    S->next=q;
    return OK;
}//Push
Status Pop (LinkStack & S,SElemType & e){
    LinkStack q=S->next;
    e=q->data;
    S->next=q->next;
    free(q);
    return OK;
}//Pop
int GetTop(LinkStack S,SElemType & e){
    
        LinkStack p=S->next;
        return e=p->data;
}//GetTop
Status TraverseStack(LinkStack S){
    LinkStack p=S->next;
    while (p!=NULL){
        printf("The element of the stack is %d\n",p->data );
        p=p->next;
    }
    return OK;
}//TraverseStack







板凳

main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "preconst.h"
#include "linkstack.h"
void main(){
    LinkStack stack;
    int elem,choice,result;
    InitStack(stack);
    while (choice){
        printf("\n\n\n");
        printf("………………Menu………………\n");
        printf("Is the stack empty   ………1\n");
        printf("The length of the stack……2\n");
        printf("Get the top element…………3\n");
        printf("Traverse the stack………… 4\n");
        printf("Push the element ……………5\n");
        printf("Pop the element………………6\n");
        printf("Exit ……………………………0\n");
        printf("……………………………………\n");
        printf("Please input your choice here:");
        scanf("%d",& choice);
        printf("\n\n\n");
        switch (choice){
        case 1:
            if (StackEmpty(stack))
                printf("The stack is empty!\n");
            else
                printf("The stack is not empty!\n");
            break;
        case 2:
            //if (!StackEmpty(stack))
                printf ("The length of the stack is :%d",Length_S(stack));
            //else
            //    exit(1);
            break;
        case 3:
            if (!StackEmpty(stack))
                printf ("The top element is:%d",GetTop(stack,elem));
            else 
                exit(1);
            break;
        case 4:
            if (!StackEmpty(stack))
                TraverseStack(stack);
            else 
                exit(1);
            break;
        case 5:
            printf("Please input the element you want to insert:");
            scanf("%d",& elem);
            result=Push(stack,elem);
            if (result)
                printf("Insert %d success!\n",elem);
            else 
                printf("Input wrong,Insert %d fail!\n",elem);
            break;
        case 6:
            if (!StackEmpty(stack)){
                result=Pop(stack,elem);
                if (result)
                    printf("Detele %d success!\n",elem);
                else 
                    printf("Input wrong,Detele %d fail!\n",elem);
                }
            else 
                exit(1);
            break;
        default:
            exit (1);
        }
    }
}




    



    

    

3 楼

谢谢了,不过好像比较难理解。

我来回复

您尚未登录,请登录后再回复。点此登录或注册