6-1 带头结点链栈的操作
本题要求实现带头链表的栈,写出Push 、Pop函数。
- 函数接口定义:
Status Push(LinkList L,ElemType e);
Status Pop(LinkList L,ElemType *e);
- 其中
L
和e
都是用户传入的参数。L
是带头结点的头指针;e
是数据元素。 - 其中
LinkList
定义如下:
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode,*LinkList;
- 裁判测试程序样例:
#include <malloc.h>
#include <stdio.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode * next;
}LNode,*LinkList;
Status InitList(LinkList *L);
Status List(LinkList L);
Status ListInsert(LinkList L,int i,ElemType e);
int main()
{
LinkList L;
int x;
InitList(&L);
Push(L,1);Push(L,2);Push(L,3);
List(L);
Pop(L,&x);
printf(" %d\n",x);
List(L);
return 0;
}
/* 请在这里填写答案 */
- 输出样例:
3 2 1
3
2 1
Status Push(LinkList L,ElemType e)
{
LinkList K ;
K = (LinkList)malloc(sizeof(LNode));
K->next = NULL;
K->data = e;
K->next = L->next ;
L->next = K;
}
Status Pop(LinkList L,ElemType *e)
{
if(L->next==NULL){
return ;
}
*e = L->next->data;
L->next = L->next->next;
}
2 十进制转二进制(顺序栈设计和应用)
设计一个顺序栈,并利用该顺序栈将给定的十进制整整数转换为二进制并输出。
- 函数接口定义:其中
MaxSize
和top
分别为栈的最大容量和栈顶指针。数组mystack
用来模拟顺序栈。请实现给出的isEmpty
、Push
、getTop
和Pop
这四个函数。
#define MaxSize 100 /* 栈最大容量 */
int top; /* 栈顶指针 */
int mystack[MaxSize]; /* 顺序栈 */
/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();
/* 元素x入栈 */
void Push(int x);
/* 取栈顶元素 */
int getTop();
/* 删除栈顶元素 */
void Pop();
- 裁判程序样例:
#include <bits/stdc++.h>
using namespace std;
#define MaxSize 100 /* 栈最大容量 */
int top; /* 栈顶指针 */
int mystack[MaxSize]; /* 顺序栈 */
/*判栈是否为空,空返回true,非空返回false */
bool isEmpty();
/* 元素x入栈 */
void Push(int x);
/* 取栈顶元素 */
int getTop();
/* 删除栈顶元素 */
void Pop();
/* 十进制正整数转换为二进制 */
void dec2bin(int x) {
top = -1; /* 初始化栈顶指针 */
while (x) {
Push(x % 2);
x >>= 1;
}
while (!isEmpty()) {
int t = getTop();
Pop();
printf("%d", t);
}
printf("\n");
}
int main(int argc, char const *argv[])
{
int n;
while (scanf("%d", &n) != EOF) {
dec2bin(n);
}
return 0;
}
/* 请在这里填写答案 */
- 输入样例:10 输出样例:1010
bool isEmpty()
{
if (top == -1)
return true;
else
return false;
}
/* 元素x入栈 */
void Push(int x)
{
if (top == MaxSize - 1)
return;
else
{
top++;
mystack[top] = x;
}
}
/* 取栈顶元素 */
int getTop()
{
if (top == -1)
return 0;
else
return mystack[top];
}
/* 删除栈顶元素 */
void Pop()
{
if (top == -1)
return;
else
top--;
}