C语言链式栈和顺序栈的实现

来源:互联网 发布:对号入座的网络词 编辑:程序博客网 时间:2024/05/02 01:37

链式栈:

#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
    datatype data;
    struct node *next;
}liststack;

liststack *top;

void setnull(liststack *ltop);
liststack *push(liststack *ltop,int x);
liststack *pop(liststack *ltop,int *x);

int main()
{
    int sel=0;
    int ret=0;
    int num=0;

    setnull(top);

    while(1)
    {
        printf("链式栈操作如下所示:\n");
        printf("\t1:压栈\n\t2:出栈\n\t3:退出\n");
        printf("请输入选择:\n");
        scanf("%d",&sel);
        switch(sel)
        {
            case 1:
                printf("请输入压栈数据:\n");
                scanf("%d",&num);
                top=push(top,num);
                if(NULL==top)
                {
                    printf("压栈错误\n");
                }
                else
                {
                    printf("压栈正确\n");
                }
                break;
            case 2:
                top = pop(top,&ret);
                if(NULL==top)
                {
                    printf("出栈错误\n");
                }
                else
                {
                    printf("出栈数据:%d\n",ret);
                }
                break;
            case 3:
                exit(0);
                break;
            default:
                printf("请输入正确选项\n");
                break;
        }
    }

    return 0;
}

void setnull(liststack *ltop)
{
    ltop=NULL;
}

liststack *push(liststack *ltop,int x)
{
    liststack *q=NULL;
    q = (liststack *)malloc(sizeof(liststack));
    if(NULL==q)
    {
        return NULL;
    }
    q->data=x;
    
    q->next=ltop;
    ltop=q;

    return ltop;
}

liststack *pop(liststack *ltop,int *x)
{
    if(NULL==ltop)
    {
        printf("underflow\n");
        return NULL;
    }

    liststack *p=NULL;
    *x=ltop->data;
    p = ltop;
    ltop=ltop->next;
    free(p);
    return ltop;
}


顺序栈:

#include <stdio.h>
#include <stdlib.h>

#define maxsize 5
typedef int datatype;

typedef struct
{
    datatype data[maxsize];
    datatype top;
}seqstack;

void setnull(seqstack *ls);
int empty(seqstack *ls);
int push(seqstack *ls,int x);
int pop(seqstack *ls);
int top(seqstack *ls);

int main()
{
    int sel=0;
    int num=0;
    int ret=0;
    seqstack *s=NULL;
    s = (seqstack *)malloc(sizeof(seqstack));
    setnull(s);
    while(1)
    {
        printf("顺序栈操作如下所示:\n");
        printf("\t1:压栈\n\t2:出栈\n\t3:取栈顶数据\n\t4:退出\n");
        printf("请输入选项:");
        scanf("%d",&sel);
        getchar();
        switch(sel)
        {
            case 1:
                printf("请输入压栈数据:\n");
                scanf("%d",&num);
                ret=push(s,num);
                if(ret==0)
                {
                    printf("压栈错误\n");
                }
                else
                {
                    printf("压栈正确\n");
                }
                break;
            case 2:
                ret = pop(s);
                if(ret==0)
                {
                    printf("出栈错误\n");
                }
                else
                {
                    printf("出栈元素是:%d\n",ret);
                }
                break;
            case 3:
                ret = top(s);
                if(ret==0)
                {
                    printf("取栈顶元素错误\n");
                }
                else
                {
                    printf("取栈顶元素是:%d\n",ret);
                }
                break;
            case 4:
                exit(0);
                break;
            default:
                printf("请选择正确的数据\n");
                break;
        }
    
    }
    return 0;
}

void setnull(seqstack *ls)
{
    ls->top=-1;
}
int empty(seqstack *ls)
{
    int ret=0;
    ret = (ls->top>=0)?0:1;
    return ret;
}
int push(seqstack *ls,int x)
{
    printf("push top:%d\n",ls->top);
    if(ls->top == maxsize-1)
    {
        printf("overflow\n");
        return 0;
    }
    ls->top++;
    ls->data[ls->top]=x;
    return 1;
}
int pop(seqstack *ls)
{
    printf("pop top:%d\n",ls->top);
    if(empty(ls))
    {
        printf("underflow\n");
        return 0;
    }
    int num=0;
    num=ls->data[ls->top];
    ls->top--;
    return num;
}
int top(seqstack *ls)
{
    if(empty(ls))
    {
        printf("underflow\n");
        return 0;
    }
    int num=0;
    num=ls->data[ls->top];
    return num;
}



0 0
原创粉丝点击