1.队列(First In First Out,FIFO)
是一种特殊的线性结构,它只允许在队列的首部(head)进行删除操作——“出队”,而在队列的尾部(tail)进行插入操作,这称为“入队”。当队列中没有元素(即head=tail),称为空队列。
#include<stdio.h>
int main()
{
int q[102]={6,3,1,7,5,8,9,2,4},head,tail;
int i;
head=0;
tail=9;
while(head<tail)
{
printf("%d ",q[head]);
head++;
q[tail]=q[head];
tail++;
head++;
}
return 0;
}
/*将队列的三个基本元素(一个数组,两个变量)封装为一个结构体类型*/
#include<stdio.h>
struct queue
{
int data[100];
int head;
int tail;
};
int main()
{
struct queue q;
int i;
q.head=1;
q.tail=1;
for(i=1;i<=9;i++) //插入9个数
{
scanf("%d",&q.data[q.tail]);
q.tail++;
}
while(q.head<q.tail)
{
printf("%d ",q.data[q.head]);
q.head++;
q.data[q.tail]=q.data[q.head];
q.tail++;
q.head++;
}
return 0;
}
2.栈
是一种先进先出的数据结构。栈限定为只能在一端进行插入和删除操作。
#include<stdio.h>
#include<string.h>
int main()
{
char a[101],s[101];
int i,len,mid,next,top;
gets(a);
len=strlen(a);
mid=len/2-1; //求得字符串的中点物理序号
top=0;
for(i=0;i<=mid;i++)
s[++top]=a[i];
if(len%2==0)
next=mid+1;
else
next=mid+2;
for(i=next;i<=len-1;i++)
{
if(a[i]!=s[top])
break;
top--;
}
if(top==0)
printf("YES");
else
printf("NO");
return 0;
}
3.链表
#include <stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *next;
};
int main()
{
struct node *head,*p,*q,*t;
int i,n,a;
scanf("%d",&n);
head=NULL;
for(i=1;i<=n;i++){
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=NULL;
if(head==NULL)
head=p;
else
q->next=p;
q=p;
}
scanf("%d",&a);
t=head;
while(t!=NULL)
{
if(t->data>a)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=t->data;
t->data=a;
p->next=t->next;
t->next=p;
break;
}
if(t->next==NULL)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
p->next=t->next;
t->next=p;
break;
}
t=t->next;
}
t=head;
while(t!=NULL){
printf("%d ",t->data);
t=t->next;
}
return 0;
}