欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言 算法与数据结构 链栈 基本操作及案例

程序员文章站 2024-03-23 09:48:58
...

C语言 算法与数据结构 链栈 基本操作及案例

实验要求:

实现链栈的判空、入栈、出栈、获得栈顶元素的基本操作。

main.c

#include"LinkStack.c"
int main()
{
    system("color f5");
    system("title 链栈的基本操作 Dev: Ice2Faith");
    printf("---------------------------------\n\n");
    printf("\t链栈的基本操作\n\n");
    printf("\tDev: Ice2Faith\n\n");
    printf("---------------------------------\n\n");
    printf("任意键继续\n>/ ");
    getch();
    //链栈栈顶指针
    LinkStack * top;
    top=DefaultListStack();
    int x;
    char exit='c';
    do
    {
        system("cls");
        printf("Please push into stack end of -999:\n>/ ");
        scanf("%d",&x);
        while(x!=-999)
        {
            Push(&top,x);
            scanf("%d",&x);
        }
        GetTop(&top,&x);
        printf("top is %d\n",x);
        printf("this is your pop stack result:\n>/ ");
        while(!IsEmpty(&top))
        {
            Pop(&top,&x);
            printf("->%d",x);
        }
        printf("\n\n退出请输入 * ,否则重新测试:\n>/ ");
        exit=getch();
    }
    while(exit!='*');
    return 0;
}

LinkStack.h

#ifndef _LinkStack_H_
#define _LinkStack_H_
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
typedef int elemtype;
//节点结构体
typedef struct node
{
    elemtype data;
    struct node * next;
} LinkStack;
//初始化链栈
LinkStack * DefaultListStack();
//检测链栈是否为空,非空返回非0,传入top的地址&top
int IsEmpty(LinkStack ** top);
//将元素x压栈到top栈中,传入top的地址&top
void Push(LinkStack ** top,elemtype x);
//出栈top栈顶元素放到x里面,成功返回非0,传入top的地址&top
int Pop(LinkStack ** top,elemtype * x);
//读取top栈栈顶的元素放入x,成功返回非0,传入top的地址&top
int GetTop(LinkStack ** top,elemtype * x);
//清空链栈
void CleanStack(LinkStack ** top);
#endif

LinkStack.c

#include"LinkStack.h"
//初始化链表
LinkStack * DefaultListStack()
{
    LinkStack * H;
    H=(LinkStack *)malloc(sizeof(LinkStack));
    H->next=NULL;
    return H;
}
int IsEmpty(LinkStack ** top)
{
    return (*top)->next==NULL;
}
void Push(LinkStack ** top,elemtype x)
{
    LinkStack * H;
    H=DefaultListStack();
    H->data=x;
    H->next=*top;
    *top=H;
}
int Pop(LinkStack ** top,elemtype * x)
{
    if(IsEmpty(top))
    {
        return 0;
    }
    LinkStack * H;
    H=*top;
    *x=H->data;
    *top=H->next;
    free(H);
    return 1;
}
int GetTop(LinkStack ** top,elemtype * x)
{
    if(IsEmpty(top))
    {
        return 0;
    }
    LinkStack * H;
    H=*top;
    *x=H->data;
    return 1;
}
void CleanStack(LinkStack ** top)
{
    while(!IsEmpty(top))
    {
        LinkStack * H;
        H=*top;
        *top=H->next;
        free(H);
    }
}