C语言 算法与数据结构 链队列 基本操作及案例
程序员文章站
2024-03-23 09:44:10
...
C语言 算法与数据结构 链队列 基本操作及案例
实验要求:
实现链队列的判空、入队、出队、获取队首元素的基本操作。
main.c
#include"LinkQueue.c"
int main()
{
system("color f5");
system("title 链队列的基本操作 Dev: Ice2Faith");
printf("---------------------------------\n\n");
printf("\t链队列的基本操作\n\n");
printf("\tDev: Ice2Faith\n\n");
printf("---------------------------------\n\n");
printf("任意键继续\n>/ ");
getch();
LinkQueue * Q=DefaultLinkQueue();
int x;
char exit='c';
do
{
system("cls");
printf("请输入元素进队,以-999结束:\n>/ ");
scanf("%d",&x);
while(x!=-999)
{
InQueue(Q,x);
scanf("%d",&x);
}
printf("Len=%d\n",LenQueue(Q));
GetHeadQueue(Q,&x);
printf("Head=%d\n",x);
printf("这是您出队的结果:\n>/ ");
while(!IsEmpty(Q))
{
OutQueue(Q,&x);
printf("->%d",x);
}
CleanQueue(Q);
printf("\n这是您清空后出队的结果:\n>/ ");
while(!IsEmpty(Q))
{
OutQueue(Q,&x);
printf("->%d",x);
}
printf("\n\n退出请输入 * ,否则重新测试:\n>/ ");
exit=getch();
}
while(exit!='*');
return 0;
}
LinkQueue.h
#ifndef _LinkQueue_H_
#define _LinkQueue_H_
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#include <math.h>
#define TRUE 1
#define FALSE 0
typedef int elemtype;
//节点结构体
typedef struct node
{
elemtype data;
struct node * next;
} LinkNode;
//队头队尾指针
typedef struct
{
LinkNode * headq;
LinkNode * endq;
} LinkQueue;
LinkNode * CreateNode();
LinkQueue * DefaultLinkQueue();
int IsEmpty(LinkQueue * Q);
void InQueue(LinkQueue * Q,elemtype x);
int OutQueue(LinkQueue * Q,elemtype * x);
int GetHeadQueue(LinkQueue * Q,elemtype * x);
int LenQueue(LinkQueue * Q);
void CleanQueue(LinkQueue * Q);
#endif
LinkQueue.c
#include"LinkQueue.h"
LinkNode * CreateNode()
{
LinkNode * P;
P=(LinkNode *)malloc(sizeof(LinkNode));
P->next=NULL;
return P;
}
LinkQueue * DefaultLinkQueue()
{
LinkQueue * Q;
Q=(LinkQueue *)malloc(sizeof(LinkQueue));
Q->headq=CreateNode();
Q->endq=Q->headq;
return Q;
}
int IsEmpty(LinkQueue * Q)
{
return Q->endq==Q->headq;
}
void InQueue(LinkQueue * Q,elemtype x)
{
LinkNode * P=CreateNode();
P->data=x;
Q->endq->next=P;
Q->endq=P;
}
int OutQueue(LinkQueue * Q,elemtype * x)
{
if(IsEmpty(Q))
{
return 0;
}
LinkNode * P=Q->headq;
*x=Q->headq->next->data;
Q->headq=Q->headq->next;
free(P);
return 1;
}
int GetHeadQueue(LinkQueue * Q,elemtype * x)
{
if(IsEmpty(Q))
{
return 0;
}
*x=Q->headq->next->data;
return 1;
}
int LenQueue(LinkQueue * Q)
{
int i=0;
LinkNode * P=Q->headq;
while(P!=Q->endq)
{
i++;
P=P->next;
}
return i;
}
void CleanQueue(LinkQueue * Q)
{
LinkNode * P=Q->headq;
while(P!=Q->endq)
{
P=Q->headq;
Q->headq=P->next;
free(P);
}
}
上一篇: ESP8266列出文件目录
下一篇: linux 实现ftp多客户端连接访问