do{
printf(\\n);
printf(第一次使用必须初始化!\\n); printf(\\n);
printf(\\n 主菜单 \\n); printf(\\n 1 初始化顺序栈 \\n); printf(\\n 2 插入一个元素 \\n); printf(\\n 3 删除栈顶元素 \\n); printf(\\n 4 取栈顶元素 \\n); printf(\\n 5 置空顺序栈 \\n); printf(\\n 6 结束程序运行 \\n); printf(\\n--------------------------------\\n); printf(请输入您的选择( 1, 2, 3, 4, 5,6)); scanf(%d,&cord); printf(\\n); switch(cord) { case 1:
{ q=(sqstack*)malloc(sizeof(sqstack)); initstack(q); outstack(q); }break;
case 2: { printf(请输入要插入的数据元素:a=); scanf(%d,&a); push(q,a); outstack(q); }break; case 3: { pop(q); outstack(q); }break; case 4:
{ y=gettop(q);
printf(\\n栈顶元素为:%d\\n,y); outstack(q); }break; case 5:
{ setempty(q);
printf(\\n顺序栈被置空!\\n); outstack(q); }break; case 6: exit(0); }
}while (cord<=6);
} [实验2] 栈的链式表示和实现 实验内容与要求: 编写一个程序实现链栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化链栈 (2)链栈置空 (3)入栈 (4)出栈
(5)取栈顶元素
(6)遍历链栈 分析:
链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。 注意:
(1)linkstack结构类型的定义可以方便地在函数体中修改top指针本身 (2)若要记录栈中元素个数,可将元素个数属性放在linkstack类型中定义。 (3)链栈中的结点是动态分配的,所以可以不考虑上溢。 参考程序:
#include stdio.h #include malloc.h #include stdlib.h typedef int elemtype;
typedef struct stacknode { elemtype data; stacknode * next; }stacknode;
typedef struct {
stacknode * top; //栈顶指针 }linkstack; /*初始化链栈*/
void initstack(linkstack * s) { s->top=null;
printf(\\n已经初始化链栈!\\n); }
/*链栈置空*/
void setempty(linkstack * s) { s->top=null;
printf(\\n链栈被置空!\\n); }
/*入栈*/
void pushlstack(linkstack * s, elemtype x) { stacknode * p;
p=(stacknode *)malloc(sizeof(stacknode)); //建立一个节点。 p->data=x; p->next=s->top; //由于是在栈顶pushlstack,所以要指向栈顶。