1、用顺序存储定义栈结构。写出这种存储方式下的算法实现,包括:初始化栈、判栈为空、出栈、入栈、求栈顶元素等运算,自己填写主函数。
2、利用顺序栈的基本操作,设计算法,实现将任意一个十进制整数转化为R进制整数
3、用顺序存储来定义循环队列结构。编程实现,初始化队列、判队列为空、出队列、入队列、求队列头部元素等运算,自己填写主函数。
4、设计只有尾指针的单循环链表表示的队列的入队和出队程序,并上机通过。
#include <stdio.h>
#include <stdlib.h>
#define maxn 100
typedef struct st
{
int data[maxn];
int top;
} stack;
typedef struct qu
{
int data[maxn];
int front,rear;
} queue;
void init(stack *st1)
{
st1->top=-1;
int data;
scanf("%d",&data);
while(data!=-1&&st1->top<maxn)
{
enstack(st1,data);
scanf("%d",&data);
}
}
int empty(stack st1)
{
if(st1.top==-1)
return 1;
else
return 0;
}
void enstack(stack *st1,int data)
{
if(st1->top<maxn)
st1->data[++st1->top]=data;
else
printf("栈已满\n");
}
int unstack(stack *st1)
{
if(st1->top>=0)
{
int t=st1->data[st1->top--];
return t;
}
else
printf("栈已空\n");
return 0;
}
int top(stack st1)
{
if(st1.top>=0)
{
int t=st1.data[st1.top];
return t;
}
else
printf("栈已空\n");
return 0;
}
void turnjz(stack *st1,int n,int tt)
{
while(n)
{
enstack(st1,n%tt);
n/=tt;
}
}
void initq(queue *que)
{
que->front=0;que->rear=0;
int data;
scanf("%d",&data);
while(data!=-1&&(que->rear+1)%maxn!=que->front)
{
enqueue(que,data);
scanf("%d",&data);
}
}
void enqueue(queue *que,int data)
{
if((que->rear+1)%maxn!=que->front)
{
que->data[que->rear]=data;
que->rear=(que->rear+1)%maxn;
}
else
printf("队已满\n");
}
int unqueue(queue *que)
{
if(que->front!=que->rear)
{
int t=que->data[que->front];
que->front=(que->front+1)%maxn;
return t;
}
else
printf("队已空\n");
return 0;
}
int front(queue que)
{
if(que.front!=que.rear)
{
int t=que.data[que.front];
return t;
}
else
printf("队已空\n");
return 0;
}
int emptyq(queue que)
{
if(que.front==que.rear)
return 1;
else
return 0;
}
int main()
{
//stack
stack sta1;
init(&sta1);
if(empty(sta1))
printf("栈空\n");
else
printf("栈不空\n");
printf("求栈顶 %d ",top(sta1));
printf("top=%d\n",sta1.top);
printf("出栈 %d ",unstack(&sta1));
printf("top=%d\n",sta1.top);
printf("求栈顶 %d ",top(sta1));
printf("top=%d\n",sta1.top);
printf("输入入栈元素\n");
int data;
scanf("%d",&data);
enstack(&sta1,data);
printf("求栈顶 %d top=%d\n",top(sta1),sta1.top);
stack turn;
printf("输入10进制数和要转换的进制\n");
int n,tt;
scanf("%d %d",&n,&tt);
init(&turn);
turnjz(&turn,n,tt);
while(!empty(turn))
{
printf("%d",unstack(&turn));
}
printf("\n");
// queue
queue que;
que.front=que.rear=0;
initq(&que);
if(emptyq(que))
printf("队空\n");
else
printf("队不空\n");
printf("求队头 %d ",front(que));
printf("front=%d\n",que.front);
printf("出队 %d ",unqueue(&que));
printf("front=%d\n",que.front);
printf("求队头 %d ",front(que));
printf("front=%d\n",que.front);
printf("输入入队元素\n");
scanf("%d",&data);
enqueue(&que,data);
printf("求队头 %d front=%d\n",front(que),que.front);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#define Elemtype int
typedef struct node
{
Elemtype data;
struct node *next;
}Lnode;
void creat(Lnode *h)
{
int data;
Lnode *p=h,*pp;
scanf("%d",&data);
while(data!=-1)
{
pp=(Lnode*)malloc(sizeof(Lnode));
pp->next=NULL;
pp->data=data;
p->next=pp;
p=pp;
scanf("%d",&data);
}
p->next=h;
}
void bianli(Lnode *h)
{
Lnode *p;
p=h->next;
while(p!=h)
{
printf("%d ",p->data);
p=p->next;
}
puts("");
}
int chudui(Lnode *h)
{
int tt=h->next->data;
h->next=h->next->next;
return tt;
}
void rudui(Lnode *h,Lnode *tt)
{
Lnode *p;
p=h->next;
while(p->next!=h)
{
p=p->next;
}
tt->next=p->next;
p->next=tt;
}
int main()
{
Lnode *h=(Lnode*)malloc(sizeof(Lnode));
h->next=NULL;
creat(h);
printf("遍历结果:");
bianli(h);
printf("请输入队元素\n");
Lnode *tt=(Lnode*)malloc(sizeof(Lnode));
scanf("%d",&tt->data);
rudui(h,tt);
printf("遍历结果:");
bianli(h);
printf("出队 %d\n",chudui(h));
printf("遍历结果:");
bianli(h);
return 0;
}