今天90行马马虎虎.。
栈这块还是比较简单!!!
只是先进行了简单的基本学习 ,练习晚上补充!!
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#define ElemType int
#define MAXSIZE 50
#include<string.h>
#include<stdio.h>
#include<Windows.h>
//栈---单链表结点说明
typedef struct linknode {
ElemType date;
struct linknode* next;
}LinkNode;
//链栈的初始化
void InitStack(LinkNode*& s);
//销毁链栈
void DestroyStack(LinkNode*& s);
//链栈判空
bool StackEmpty(LinkNode*& s);
//进链栈
int PushStack(LinkNode*& s, ElemType e);
//出链栈
ElemType PopStack(LinkNode*& s);
//取栈顶元素
ElemType GetTop(LinkNode*& s);
//---------------------------具体函数------------------------------------
void InitStack(LinkNode*& s) {
s = (LinkNode*)malloc(sizeof(LinkNode));
s->next = NULL;
}
void DestroyStack(LinkNode*& s) {
LinkNode* r, * w;
r = s;
w = s->next;
while (w != NULL) {
free(r);
r = w;
w = r->next;
}
free(r);
}
bool StackEmpty(LinkNode*& s) {
return(s->next == NULL);
}
int PushStack(LinkNode*& s, ElemType e) {
LinkNode* r;
r = (LinkNode*)malloc(sizeof(LinkNode));
r->date = e;
r->next = s->next;
s->next = r;
return 0;
}
ElemType PopStack(LinkNode*& s) {
LinkNode* r,*w;
//出战之前先判断栈是否为空
if (s->next == NULL) {
printf("栈中没有数据,返回值为 :0\n");
return 0;
}
r = s;
w = s->next;
while ( r->next != NULL) {
r = r->next;
}
ElemType i = r->date;
free(r);
return i;
}
ElemType GetTop(LinkNode*& s) {
LinkNode* r=s;
//先判空
if (s->next == NULL) {
printf("栈中没有数据,返回值为 :0\n");
return 0;
}
while (r->next != NULL) {
r = r->next;
}
return r->date;
}
int main() {
int choose;
LinkNode* s;
while (1) {
printf("\n");
printf("\t\t\t\t\t******************菜单********************\n");
printf("\t\t\t\t\t1.初 始 化 栈 2.销 毁 栈 \n");
printf("\t\t\t\t\t3.进 栈 4.出 栈 \n");
printf("\t\t\t\t\t5.取 栈 顶 元 素 6.三 合 一 创 建 \n");
printf("\t\t\t\t\t**************** 7-练习 ******************\n");
printf("\t\t\t\t\t**************** 0-退出 ******************\n");
printf("\n"); printf("\n"); printf("\n");
printf("\n");
printf("请进行功能选择:");
scanf("%d", &choose);
switch (choose) {
case 1: {
InitStack(s);
printf("初始化完成");
printf("\n");
system("pause");
break;
}
case 2: {
DestroyStack(s);
printf("销毁完成"); printf("\n");
system("pause");
break;
}
case 3: {
ElemType e;
printf("请输入你想要进栈的元素:\n");
scanf("%d", &e);
PushStack(s, e);
printf("\n");
system("pause");
break;
}
case 4: {
ElemType i;
i=PopStack(s);
printf("出栈元素为:%d\n", i);
printf("\n");
system("pause");
break;
}
case 5: {
ElemType q;
q=GetTop(s);
printf("栈顶元素为:%d\n", q);
printf("\n");
system("pause");
break;
}
/*
case 6: {
CreatStack(s);
printf("\n");
system("pause");
break;
}
case 7: {
ElemType str[] = "sasdasdada";
ElemType st[] = "sasas";
int k1 = sizeof(str) / sizeof(str[0]);
int k2 = sizeof(st) / sizeof(st[0]);
bool a = symmertry(str, k1);
bool b = symmertry(st, k2);
//int k = sizeof(str) ;
//int k1= sizeof(ElemType);
//printf("%d\t%d", k, k1);
if (a == true) {
printf("str中对称\n");
}
else {
printf("str不对称\n");
}
if (b == true) {
printf("st中对称\n");
}
else {
printf("st不对称\n");
}
printf("\n");
system("pause");
break;
}
*/
case 0: {
printf("程序结束\n");
return 0;
}
default: {
printf("请输入正确的选项\n");
printf("\n");
break;
}
}
}
return 0;
}