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;
}