(此文为王道数据结构学习笔记,只供个人后续复习使用,若有错误,还望指出我改正,谢谢)
回顾上一篇文章学习内容:
单链表的后插、删除
顺序栈及其基本操作
顺序队列及其基本操作
本次手写巩固一下前三篇学习的内容 将手写 线性表、链表、栈、队列的各自操作:
静态顺序表:
其中要注意到数组下标与序号差1,为了代码的健壮性,要留意特殊情况。静态顺序表比较简单。
动态顺序表:
.
其余操作与静态分配基本一致,只不过最大容量可变。
链表:
单链表:
?
?
?
?用编译器测试以上功能:
主函数为:
int main() {
LinkList L1;
LinkList L2;
//两个链表
LNode *p;
LNode *q;
//插入删除查找等指示指针
int ElemL1, ElemL2;
LNode *eL1;
LNode *eL2;
//查找的结点及其数值
int LocateL1, LocateL2;
int NumL1, NumL2;
//查找的结点位置
int insertL1, insertL2;
int e1, e2;
//在某号后插入结点
int d1, d2;
int delete1, delete2;
//删除某号结点
bool bool1, bool2;//用于判断插入删除成功
printf("请输入正整数作为L1链表数据域,以9999作为结束。(头插法)\n");
L1 = List_HeadInsert(L1);
p = L1->next;
printf("链表L1的数据为:\n");
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}//打印出以头插法建立的链表L1
printf("\n\n");
printf("请输入正整数作为L2链表数据域,以9999作为结束。(尾插法)\n");
L2 = List_TailInsert(L2);
q = L2->next;
printf("链表L2的数据为:\n");
while (q != NULL) {
printf("%d ", q->data);
q = q->next;
}//打印出以尾插法建立的链表L2
printf("\n\n");
printf("请输入你想查找L1中结点序号?\n");
scanf_s("%d", &ElemL1);
eL1 = GetElem(L1, ElemL1);
printf("该结点的值域为%d\n\n", eL1->data);
printf("请输入你想查找L1中元素序号?\n");
scanf_s("%d", &ElemL2);
eL2 = GetElem(L2, ElemL2);
printf("该结点的值域为%d\n\n", eL2->data);
printf("请输入你想查找L1中何值?\n");
scanf_s("%d", &LocateL1);
NumL1 = LocateElem(L1, LocateL1);
printf("该值的序号为%d\n\n", NumL1);
printf("请输入你想查找L2中何值?\n");
scanf_s("%d", &LocateL2);
NumL2 = LocateElem(L2, LocateL2);
printf("该值的序号为%d\n\n", NumL2);
printf("你想在L1的那一号结点后插入新结点?\n");
scanf_s("%d", &insertL1);
printf("请输入该新结点的值\n");
scanf_s("%d", &e1);
bool1 = ListInsert(L1, insertL1, e1);
if (bool1 == true)
printf("插入成功!");
printf("插入后L1链表的数据为\n");
p = L1->next;
while (p != NULL) {
printf("%d ",p->data);
p = p->next;
}//打印出插入后的链表L1
printf("\n\n");
printf("你想在L2的那一号结点后插入新结点?\n");
scanf_s("%d", &insertL2);
printf("请输入该新结点的值\n");
scanf_s("%d", &e2);
bool2 = ListInsert(L2, insertL2, e2);
if (bool2 == true)
printf("插入成功!");
printf("插入后L2链表的数据为\n");
p = L1->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}//打印出插入后的链表L2
printf("\n\n");
bool1 = false;
bool2 = false;
printf("\n\n");
printf("你想删除L1中的哪一号结点?\n");
scanf_s("%d", &d1);
bool1 = ListDelete(L1, d1, delete1);
if (bool1 == true)
printf("删除成功!");
printf("被删除结点数据为%d\n",delete1);
printf("删除后L2链表的数据为\n");
p = L1->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}//打印出删除后的链表L2
printf("\n\n");
printf("\n\n");
printf("你想删除L2中的哪一号结点?\n\n");
scanf_s("%d", &d2);
bool2 = ListDelete(L2, d2, delete2);
if (bool2 == true)
printf("删除成功!");
printf("被删除结点数据为%d\n",delete2);
printf("删除后L2链表的数据为\n");
p = L1->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}//打印出删除后的链表L2
printf("\n\n");
return 0;
}
结果展示:
?
?功能全部正确无误。
|