队列
一、队列分为链队,顺序队
二、先入先出
三循环队列
顺序队:
代码:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef struct dui
{
int * base;
int rear;
int end;
}duilie;
int rudui (int n);
void shanchu(int n);
void shuchu(int n);
duilie L;
int main()
{
int n,m;
printf("输入入队元素数!\n");
scanf("%d",&n);
while(1)
{
printf("\n是否继续修改队列!(0:终止,1:继续)\n");
scanf("%d",&m);
if(m==0)
break;
if(m==1)
{
rudui(n);
shanchu(n);
shuchu(n);
}
else
printf("输入不合法!\n");
}
printf("\n回见!");
}
int rudui(int n)
{
L.base=(int *)malloc(n*sizeof(int));
printf("\n输入元素!(输入-1终止输入)\n");
while(scanf("%d",&L.base[L.end]),L.base[L.end] != -1)
{
L.end=(L.end+1)%n;
}
if((L.end+1)%n==L.rear)
printf("队满!\n");
}
void shanchu(int n)
{
int m;
printf("输入需要删除的元素数!\n");
scanf("%d",&m);
if(m<=abs(L.end-L.rear))
printf("删除元素为:");
while(m--)
{
printf("%d ",L.base[L.rear]);
L.rear=(L.rear+1)%n;
if((L.rear)%n==L.end)
printf("\n队空!\n");
}
}
void shuchu(int n)
{
if(L.rear%n!=L.end)
printf("\n输出队中剩余元素:");
while(L.rear%n!=L.end)
{
printf("%d",L.base[L.rear]);
L.rear=(L.rear+1)%n;
}
}
链栈
代码
#include<stdio.h>
#include<stdlib.h>
void shuru();
void shuchu();
typedef struct dui
{
int a;
struct dui *next;
} DUI;
DUI *L,*E;
int main ()
{
shuru();
shuchu();
return 0;
}
void shuru()
{
DUI *p;
int n;
L =(DUI* )malloc(sizeof(DUI));
E =(DUI* )malloc(sizeof(DUI));
E=L;
printf("您将要输入多少个数呢?\n");
scanf("%d",&n);
printf("输入您要输入的数\n");
while(n--)
{
scanf("%d",&E->a);
p =(DUI* )malloc(sizeof(DUI));
E->next=p;
E=p;
}
}
void shuchu()
{
int n;
printf("请问您需要输出几个数呢?\n");
scanf("%d",&n);
while(n--)
{
printf("%d ",L->a);
L=L->next;
}
}