第六天 --对双链表的学习

今天  ~=280行;

对链表内容进行了强化训练,感觉很充实。

加油!!!!

代码如下:

(注:---由于时间关系case3以后内容并没有完成所以后面代码为bug具体完善,紧接第七天)


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<string.h>

//双链表结点说明
typedef struct DNode {
	int date;
	struct DNode* prior;
	struct DNode* next;
}DLinkNode;


//创建链表-1.1头插法-程序测验
void CreatListF01(DLinkNode*& L, int a[], int n);
//创建链表-1.2头插法-正式程序
void CreatListF(DLinkNode*& L);
//创建链表-2.1尾插法-程序测验
void CreatListR01(DLinkNode*& L, int a[], int n);
//创建链表-2.2尾插法-正式程序
void CreatListR(DLinkNode*& L);
//打印链表
void DisplayList(DLinkNode*& L);





void CreatListF01(DLinkNode*& L, int a[], int n) {
	//新创建的链表先将其初始化
	L = (DLinkNode*)malloc(sizeof(DLinkNode));
	L->next = L->prior = NULL;

	for (int i = 0; i < n; ++i) {
		DLinkNode* s;
		s = (DLinkNode*)malloc(sizeof(DLinkNode));
		s->date = a[i];
		s->next = L->next;
		if (L->next != NULL) {
			L->next->prior = s;
		}
		L->next = s;
		s->prior = L;
	}



}
void CreatListF(DLinkNode*& L) {
	//新创建的链表先将其初始化
	L = (DLinkNode*)malloc(sizeof(DLinkNode));
	L->next = L->prior = NULL;
	//
	int n;
	printf("\t\t\t\t\t********请输入你要输入元素的数量:********\n");
	scanf("%d", &n);
	for (int i = 0; i < n; ++i) {
		DLinkNode* s;
		s = (DLinkNode*)malloc(sizeof(DLinkNode));
		printf("请输入第%d个元素:", i+1);
		scanf("%d", &s->date);
		s->next = L->next;
		if (L->next != NULL) {
			L->next->prior = s;
		}
		L->next = s;
		s->prior = L;
	}



}
void CreatListR01(DLinkNode*& L, int a[], int n) {
	//先初始化
	L = (DLinkNode*)malloc(sizeof(DLinkNode));
	L->next = L->prior = NULL;
	//
	DLinkNode* s = L;
	for (int i = 0; i < n; ++i) {
		DLinkNode* r;
		r = (DLinkNode*)malloc(sizeof(DLinkNode));
		r->date = a[i];
		//r->next = s->next;
		s->next = r;
		r->prior = s;
		s = r;




	}
	s->next = NULL;


}
void CreatListR(DLinkNode*& L) {
	//先初始化
	L = (DLinkNode*)malloc(sizeof(DLinkNode));
	L->next = L->prior = NULL;
	//
	int n;
	printf("\t\t\t\t\t********请输入你要输入元素的数量:********\n");
	scanf("%d", &n);
	DLinkNode* s = L;
	for (int i = 0; i < n; ++i) {
		DLinkNode* r;
		r = (DLinkNode*)malloc(sizeof(DLinkNode));
		//r->date = a[i];
		printf("请输入第%d个元素:", i + 1);
		scanf("%d", &r->date);
		//r->next = s->next;
		s->next = r;
		r->prior = s;
		s = r;




	}
	s->next = NULL;
}
void DisplayList(DLinkNode*& L) {
	DLinkNode* s=L;
	int i=0;
	while (s->next != NULL) {
		++i;
		printf("第%d个元素--%d\t",i,s->next->date);
		s = s->next;
	}
}

int main() {
	DLinkNode* L;
	int a[] = { 1,2,3,4,5,6,7,8,9 };
	int n = 5;
	int choose;
	while (1) {
		printf("\n");
		printf("\n\t\t\t			     菜    单		    \n");
		printf("\n\t\t\t\t\t***************************************\n");
		printf("\n\t\t\t\t\t1-创    建    表    2-销     毁     表  \n");
		printf("\n\t\t\t\t\t3-检测表是否为空    4-求 表  的 长  度   \n");
		printf("\n\t\t\t\t\t5-输 出 线 性 表    6-求表中的‘e’元素  \n");
		printf("\n\t\t\t\t\t7-插 入‘e’元素    8-删 除 ‘e’ 元 素  \n");
		printf("\n\t\t\t\t\t*************** 9-练习 ****************\n");
		printf("\n\t\t\t\t\t*************** 0-退出 ****************\n");
		printf("\n\n\n");
		printf("请进行选项操作:");
		scanf("%d", &choose);
		switch (choose) {
			case 1: {
				//CreatListF01(L,a,n);
				//CreatListR01(L, a, n);
				//CreatListR(L);
				int i;
				printf("\t\t\t\t\t\t      请选择:\n\n\n\t\t\t\t\t1-顺序排列\t\t2-逆序排列\n");
				
				while (1) {
					scanf("%d", &i);
					if (i == 1) {
						CreatListR(L); break;
					}
					else if (i == 2) {
						CreatListF(L); break;
					}
					else {
						printf("\t\t\t********请在\t\t-----1-------2-----\t\t之间做出选择********\t\t");
					}
				}

				printf("\n");
				system("pause");
				break;

				}
			case 2: {
				DisplayList(L); 
				printf("\n");
				printf("\n");
				printf("\n");
				printf("\t\t\t\t********友情提醒:在销毁完成后无法进行其他对表的操作操作********\n");
				printf("\n");
				printf("\n");
				printf("\n");
				system("pause");
				break;
			}
			case 3: {
				bool a3 = ListEmpty(L);
				if (a3 == false) {
					printf("\t\t\t\t\t    *********表并不为空*********\n");
				}
				else {
					printf("\t\t\t\t\t\t*********表为空*********");
				}
				printf("\n");
				system("pause");
				break;
			}
			case 4: {
				int a4 = ListLength(L);
				printf("表的长度为:%d\n", a4);
				printf("\n");
				system("pause");
				break;
			}
			case 5: {
				DisplayListF(L);
				printf("\n");
				system("pause");
				break;
			}
			case 6: {
				printf("\t\t\t\t\t*********请输入你要查找的元素*********\n");
				int num6;
				scanf("%d", &num6);
				GetList(L, num6);
				printf("\n");
				system("pause");
				break;
			}
			case 7: {
				int num7, p7;
				DisplayListF(L);
				printf("\t\t\t\t\t********请选择你要插入的元素********\n");
				scanf("%d", &num7);
				printf("\t\t\t\t\t*********请选择你要插入位置********\n");
				scanf("%d", &p7);
				ListSert(L, num7, p7);
				printf("\n");
				DisplayListF(L);
				system("pause");
				break;
			}
			case 8: {

				int num8;
				printf("请选择你要删除的元素:\n");
				DisplayListF(L);
				scanf("%d", &num8);

				bool CA8 = DeleteList(L, num8);
				if (CA8 != true) {
					printf("删除失败,请你选择正确的删除项\n");
				}
				//DisplayList(L);
				printf("\n");
				system("pause");
				break;
			}
			case 9: {
				LNode* k, * j;
				sList(L, k, j);
				printf("分解之后第一组表:\n");
				DisplayListF(k);
				printf("\n");
				printf("分解之后第二组表:\n");
				DisplayListF(j);
				system("pause");
				break;

			}
			case 0: {
				return 0;

			}
			default: {
				printf("请输入正确的选项");
				printf("\n");
				system("pause");
				break;
			}
			}
			
		}
	
	
	
	

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值