利用C/C++实现链队的增改查删操作
1.首先对于部分内容进行宏定义
#define OK 1;
#define ERROR 0
#define OVERFLOW -2
2.定义结构体操作
typedef int Status;
typedef int QElemType;
typedef struct QNode//结点QNode定义
{
QElemType data;//队的数据域
struct QNode* next;//队的指针域
}QNode, * QueuePtr;
typedef struct
{
QueuePtr front;//头指针
QueuePtr rear;//尾指针
}LinkQueue;
3.初始化链队
Status InitQueue(LinkQueue& Q)
{//初始化
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
Q.front->next = NULL;
return OK;
}
4.创建链队
Status CreateQueue(LinkQueue& Q)
{//创建队列
InitQueue(Q);
QueuePtr p;
int n;
printf("请输入链队的元素个数:");
scanf_s("%d", &n);
printf("请输入元素值:");
for (int i = 0; i < n; i++)
{
p = (QueuePtr)malloc(sizeof(QNode));
cin >> p->data;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
}
return OK;
}
5.遍历链队
Status DisplayQueue(LinkQueue& Q)
{//遍历
if (Q.front->next == NULL)//队列空退出
{
printf("空链队");
return ERROR;
}
QueuePtr p = Q.front->next;//连接头结点
while (p != NULL)
{
printf("%4d", p->data);
p = p->next;
}
printf("\n");
return OK;
}
6.插入链队
Status EnQueue(LinkQueue& Q)
{//插入队列
QueuePtr p;//声明结点
p = new QNode;//定义头结点指针
printf("请输入要添加元素的值:");
cin >> p->data;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
printf("插入成功");
return OK;
}
7.删除链队
Status DeQueue(LinkQueue& Q)
{//删除队列
QElemType e;
QueuePtr p;
if (Q.front == Q.rear) return ERROR;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
delete p;
printf("被删除元素是:%d\n", e);
return OK;
}
8.在链队中取元素
QElemType GetHead(LinkQueue& Q)
{//取队列值
if (Q.front != Q.rear)
{
printf("对头元素值为:%d\n", Q.front->next->data);
}
return OK;
}
9.获取链队的长度
QElemType GetLength(LinkQueue& Q)
{//获取队列的长度
int len = 0;
if (Q.front != Q.rear)
{
QueuePtr p = Q.front->next;
while (p)
{
len++;
p = p->next;
}
}
printf("链队长度为%d\n", len);
return OK;
}
10.主函数(增加菜单)
int main()
{
LinkQueue Q;
int i;
printf("1:初始化链队\n");
printf("2;创建链队\n");
printf("3:插入\n");
printf("4:删除\n");
printf("5:输出队头元素\n");
printf("6:输出链队的长度\n");
printf("7:打印链队\n");
printf("8:结束操作\n");
printf("请输入将要进行操作的序号:");
while (1) {
cin >> i;
switch (i)
{
case 1:InitQueue(Q); printf("初始化成功!\n");
break;
case 2:CreateQueue(Q);
break;
case 3:EnQueue(Q);
DisplayQueue(Q);
break;
case 4:DeQueue(Q);
DisplayQueue(Q);
break;
case 5:GetHead(Q);
break;
case 6:GetLength(Q);
break;
case 7:DisplayQueue(Q);
break;
case 8:printf("操作已结束");
break;
default:printf("该选择不存在,请重新输入\n");
}
}
system("pause");
}
运行结果: