今天 ~=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;
}