七、数据结构
1.顺序队列
源程序:
#define maxsize 100
typedef struct
{
int data[maxsize];
int front;
int rear;
} sqqueue;
int sqinit(sqqueue *p) //队列初始化
{
p->front=0;
p->rear=0;
return 1;
}
int enqueue(sqqueue *q, int e) //入队
{
if((q->rear+1)%maxsize==q->front)
return 0;
else
q->data[q->rear]=e;
q->rear=(q->rear+1)%maxsize;
return 1;
}
int dequeue(sqqueue *q) //出队
{
int e;
if (q->front==q->rear)
return 0;
e=q->data[q->front];
q->front=(q->front+1)%maxsize;
return e;
}
int empty(sqqueue *q) //判空
{
int v;
if (q->front==q->rear)
v=1;
else
v=0;
return v;
}
int gethead(sqqueue *q) //取得头元素
{
int e;
if (q->front==q->rear)
e=-1;
else
e=q->data[q->front];
return e;
}
void display(sqqueue *q) //显示所有元素
{
int s;
s=q->front;
printf("the sequeue is display:/n");
if (q->front==q->rear)
printf("the sequeue is empty!");
else
{
while(s<q->rear)
{
printf("->%d", q->data[s]);
s=(s+1)%maxsize;
}
printf("/n");
}
}
main(sqqueue *head) //函数使用样例
{
int n,i,m,x,y,select,xq;
printf("create a empty sequeue/n");
sqinit(head);
printf("please input the sequeue length:/n");
scanf("%d",&n);
for (i=0;i<n;i++)
{
printf("please input a sequeue value:/n");
scanf("%d",&m);
enqueue(head,m);
}
printf("head->rear:%d/n",head->rear);
printf("head->front:%d/n",head->front);
display(head);
printf("select 1 **** enqueue() /n");
printf("select 2 **** dequeue() /n");
printf("select 3 **** empty () /n");
printf("select 4 **** gethead() /n");
printf("select 5 **** display() /n");
printf("please select (1--5):");
scanf("%d",&select);
switch(select)
{
case 1:
{
printf("please input a value :/n ");
scanf("%d",&x);
enqueue(head,x);
display(head);
break;
}
case 2:
{
dequeue(head);
display(head);
break;
}
case 3:
{
if(empty(head))
printf("the sequeue is empty");
else
printf("the sequeue is full");
}
case 4:
{
y=gethead(head);
printf("output head value:%d/n",y);
break;
}
case 5:
{
display(head);
break;
}
}
}
}
2.顺序栈
源程序:
#define m 100
typedef struct
{
int stack[m];
int top;
} stackstru;
init(stackstru *s) /*装入栈*/
{
s->top=0;
return 1;
}
int push(stackstru *s,int x) /*入栈操作*/
{
if (s->top==m)
printf("the stack is overflow!/n");
else
{
s->top=s->top+1;
s->stack[s->top]=x;
}
}
void display(stackstru *s) /*显示栈所有数据*/
{
if(s->top==0)
printf("the stack is empty!/n");
else
{
while(s->top!=0)
{
printf("%d->",s->stack[s->top]);
s->top=s->top-1;
}
}
}
int pop(stackstru *s) /*出栈操作并返回被删除的那个记录*/
{
int y;
if(s->top==0)
printf("the stack is empty!/n");
else
{
y=s->stack[s->top];
s->top=s->top-1;
return y;
}
}
int gettop(stackstru *s) /*得到栈顶数*/
{
int e;
if(s->top==0)
return 0;
else
e=s->stack[s->top];
return e;
}
main(stackstru *p) //函数使用演示
{
int n,i,k,h,x1,x2,select;
printf("create a empty stack!/n");
init(p);
printf("input a stack length:/n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("input a stack value:/n");
scanf("%d",&k);
push(p,k);
}
printf("select 1:display()/n");
printf("select 2:push()/n");
printf("select 3:pop()/n");
printf("select 4:gettop()/n");
printf("input a your select(1-4):/n");
scanf("%d",&select);
switch(select)
{
case 1:
{
display(p);
break;
}
case 2:
{
printf("input a push a value:/n");
scanf("%d",&h);
push(p,h);
display(p);
break;
}
case 3:
{
x1=pop(p);
printf("x1->%d/n",x1);
display(p);
break;
}
case 4:
{
x2=gettop(p);
printf("x2->%d",x2);
break;
}
}
}