#ifndef _HEAD_H
#define _HEAD_H
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int datatype;
#define MAXSIZE 10
typedef struct
{
int top;
datatype data[MAXSIZE];
}stack;
stack * create();
int push(stack*l,datatype key);
int pop (stack*l);
void output(stack * l);
typedef struct Node
{
union
{
int len;
datatype data;
};
struct Node *next;
}*linklist;
void head_delete(linklist l);
void head_insert(linklist l,datatype key);
linklist create1(int flag);
void linklistput(linklist l);
void menue1();
void menue2();
void menue3();
#endif
#include "head.h"
void menue1()
{
puts("------------------------------");
puts("\t1,顺序栈");
puts("\t2,链栈");
puts("\t0退出程序");
puts("------------------------------");
}
void menue2()
{
puts("------------------------------");
puts("\t1,顺序栈的插入");
puts("\t2,顺序栈的删除");
puts("\t3,顺序栈的遍历");
puts("\t0,返回上一级");
puts("------------------------------");
}
void menue3()
{
puts("------------------------------");
puts("\t1,链栈的插入");
puts("\t2,链栈的删除");
puts("\t3,链栈的遍历");
puts("\t0,返回上一级");
puts("------------------------------");
}
stack * create()
{
stack* l = (stack*)malloc(sizeof(stack));
if(l == NULL)
return NULL;
l->top = -1;
return l;
}
int push(stack*l,datatype key)
{
if(l==NULL || l->top == MAXSIZE -1)
{
printf("插入失败\n");
return -1;
}
l->top++;
l->data[l->top] = key;
return 0;
}
int pop (stack*l)
{
if(l==NULL || l->top == -1)
{
printf("删除失败\n");
return -1;
}
printf("%d",l->data[l->top]);
l->top--;
return 0;
}
void output(stack * l)
{
if(l==NULL || l->top == MAXSIZE -1)
{
printf("插入失败\n");
return ;
}
for (int i = l->top;i>=0;i--)
{
printf("%d\t",l->data[i]);
}
puts("");
}
linklist create1(int flag)
{
linklist l = (linklist)malloc(sizeof(struct Node));
if (l == NULL)
{
printf("创建失败\n");
return NULL;
}
if (flag = 1)
l->len = 0;
else
l->data = 0;
return l;
}
void head_insert(linklist l,datatype key)
{
if (l == NULL)
{
printf("创建失败\n");
return ;
}
linklist s = create1(0);
if (l == NULL)
{
printf("创建失败\n");
return ;
}
s->data = key;
s->next = l->next;
l->next = s;
l->len++;
}
void head_delete(linklist l)
{
if (l == NULL)
{
printf("创建失败\n");
return ;
}
linklist s = l->next;
l->next = s->next;
free(s);
s = NULL;
l->len--;
}
void linklistput(linklist l)
{
if(l==NULL || l->next == NULL)
{
printf("输出失败\n");
return ;
}
linklist p = l;
while(p->next != NULL)
{
p=p->next;
printf("%d\t",p->data);
}
puts("");
}
#include "head.h"
int main(int argc, const char *argv[])
{
int number;
while(1)
{ loop:
menue1();
printf("请输入你的选择:");
scanf("%d",&number);
switch(number)
{
case 1:
{ stack * l = create();
menue2();
int number2;
while(1)
{
printf("请输入你的选择:");
scanf("%d",&number2);
switch(number2)
{
case 1:
{
int n; datatype key;
printf("请输入插入个数");
scanf("%d",&n);
for(int i = 0; i < n;i++ )
{
printf("请输入要插入的值");
scanf("%d",&key);
push(l, key);
}
} break;
case 2:
{
pop(l);
break;
}
case 3:
{
output(l);
break;
}
default : printf("输入错误\n");break;
case 0 :printf("请返回上一级\n");goto loop;
}
}
}
case 2:{
menue3();
linklist l = create1(1);
int number3;datatype key;int n;
while(1)
{
printf("请输入你的选择:");
scanf("%d",&number3);
switch(number3)
{
case 1:
{
printf("请输入你要插入几个");
scanf("%d",&n);
for(int i = 0;i<n;i++)
{
printf("请输入你要插入的值");
scanf("%d",&key);
head_insert(l,key);
}break;
case 2:
{
head_delete(l);
}break;
case 3:
{
linklistput(l);
} break;
default : printf("输入错误\n");break;
case 0 :printf("请返回上一级\n");goto loop;
}
}
}
}
}
}
return 0;
}