双向带头循环链表的基本操作(含菜单)

目录

text.c

DList.c

DList.h

后言


text.c

         后面的注释内容是对接口功能的测试。

#include "DList.h"

void menu()
{
	printf("***********************************\n");
	printf("**0. 退出        1. 头插         **\n");
	printf("**2. 头删        3. 尾插         **\n");
	printf("**4. 尾删        5. 打印         **\n");
	printf("**6. 判空        7. 查找         **\n");
	printf("**8. pos前插入   9. 删除pos      **\n");
	printf("**                               **\n");
	printf("**注:8和9功能要复用7找到位置pos **\n");
	printf("***********************************\n");
	printf("***********************************\n");
}

int main()
{
	DListNode* s1 = NULL;
	s1= DListInit(s1);
	DListNode* pos = NULL;
	DListNode* pos1 = s1;
	int input = 0;
	do
	{
		menu();
		printf("请输入选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case secede:
		{
			DestroyDList(s1);
			printf("退出成功\n");
			break;
		}
		case pushfront:
		{
			DListData x = 0;
			printf("请输入你要头插的数字\n");
			scanf("%d", &x);
			DListPushFront(s1, x);
			printf("头插成功\n");
			break;
		}
		case popfront:
		{
			DListPopFront(s1);
			printf("头删成功\n");
			break;
		}
		case pushback:
		{
			DListData x = 0;
			printf("请输入你要尾插的数字\n");
			scanf("%d", &x);
			DListPushBack(s1, x);
			printf("尾插成功\n");
			break;
		}
		case popback:
		{
			DListPopBack(s1);
			printf("尾删成功\n");
			break;
		}
		case show:
		{
			ShowDList(s1);
			break;
		}
		case empty:
		{
			bool tmp = EmptyDList(s1);
			if (tmp == true)
			{
				printf("链表为空\n");
			}
			else
			{
				printf("链表不为空\n");
			}
			break;
		}
		case find:
		{
			int tmp = 0;
			int chose = 0;
			DListData x = 0;
			printf("请输入你要查找的数据\n");
			scanf("%d", &x);
			do
			{
				if (tmp == 0)
				{
					pos1 = DListFind(s1, x);//pos1记录下第一个pos结点
					tmp++;
					pos = pos1;
				}
				else
				{
					pos= DListFind(pos, x);
					if (pos == NULL|| pos == pos1)
					{
						printf("你要找的数据不存在\n");
						break;
					}
				}
				if (pos1 == NULL || pos== s1 )
				{
					printf("你要找的数据不存在\n");
					break;
				}
				printf("是否要查找下一个数字%d\n", x);
				printf("是(!0)   否(0)\n&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值