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);
}
}
上一篇: 707设计链表