数据结构作业:链表的基本功能实现
程序员文章站
2024-03-22 10:24:22
...
这是自己根据书上的代码写出的程序能大致运行,应付老师没得问题;但是程序有许多缺陷不过嘛刚学数据结构的学生,有缺陷是正常的。
#include <stdio.h>
#include <stdlib.h>
#define OK 1;
#define ERROR 0;
typedef int Status;
typedef struct LNode {
char data;
struct LNode* next;
}LNode ,*LinkList;
LinkList p;
//初始化表
Status InitList(LinkList& L) {
L = new LNode;
L->next = NULL;
return OK;
}
//在链表的i出得到他的值
Status GetElem(LinkList &L, int i) {
int j;
int e = 0;
p = L->next;
j = 1;
while (p && j < i) {
p = p->next;
j++;
}
if (!p || j > 1)
return ERROR;
e = p->data;
printf("%d", e);
return OK;
}
Status LocateElem(LinkList &L, char e) {
p = L->next;
int j=1;
while (p && p->data != e) {
p = p->next;
j++;
}
printf("数值对应链表中的位置%d", j);
return OK;
}
//在链表i处插入一个值e
Status InserElem(LinkList& L, int i, char e) {
p = L; int j = 0;
LinkList s;
while (p && (j < i - 1)) {
p = p->next;
j++;
}
if (!p || j > i - 1)
return ERROR;
s = new LNode;
s->data = e;
s->next = p->next;
p->next = s;
return OK;
}
Status ListDelete(LinkList& L, int i) {
p = L;
LinkList q;
int j = 0;
while ((p->next)&&(j<i-1))
{
p = p->next;
j++;
}
if ((!p->next) || (j > i - 1))
return OK;
q = p->next;
p->next = q->next;//q是需要删除的那个链表的位置现在p的指针域直接指到了他的下下个;
delete q;
return OK;
}
void CreateList_h(LinkList& L, int n) {
L = new LNode;
L->next = NULL;
printf("请输入需要创建链表的值域:\n");
for (int i = 0; i < n; i++) {
p = new LNode;
scanf_s("%c", &p->data, 1);
p->next = L->next;
L->next = p;
}
}
void CreateList_w(LinkList & L, int n) {
L = new LNode;
L->next = NULL;
LinkList r;
r = L;
printf("请输入需要创建链表的值域:\n");
for (int i = 0; i < n; i++) {
p = new LNode;
scanf_s("%c", &p->data, 1);
r->next = p;
r = p;
}
r->next = NULL;
}
void PrintList(LinkList &L){
LinkList node = L->next;
printf("表中的元素为:\n");
while (node != NULL) {
printf("%c ", node->data);
node = node->next;
}
}
int main() {
LinkList L;
int x;
char z;
int i = 0;
while (1) {
printf("选出想要执行的功能其对应选项\n");
printf("1.初始化链表L\n");
printf("2.查询链表中i的值\n");
printf("3.根据值查询链表中i的位置\n");
printf("4.在i处插入一个值\n");
printf("5.删除i的值\n");
printf("6.头插法创建单链表\n");
printf("7.尾插法创建单链表\n");
printf("8.展示单链表\n");
printf("9.关闭程序\n");
scanf_s("%d", &i, 1);
switch (i)
{
case 1:
InitList(L);
break;
case 2:
printf("请输入所要查询的值的位置:\n");
scanf_s("%d", &x, 1);
GetElem(L, x);
PrintList(L);
break;
case 3:
printf("请输入所要查询的值:\n");
scanf_s("%c", &z, 1);
LocateElem(L, z);
PrintList(L);
break;
case 4:
printf("请输入所要插入的值和插入的位置:\n");
scanf_s("%d%c", &x, &z, 1, 1);
InserElem(L,x,z);
PrintList(L);
break;
case 5:
printf("请输入所要删除的值的位置:\n");
scanf_s("%d", &x, 1);
ListDelete(L, x);
PrintList(L);
break;
case 6:
printf("请输入需要创建链表的长度:\n");
scanf_s("%d", &x, 1);
CreateList_h(L, x);
PrintList(L);
break;
case 7:
printf("请输入需要创建链表的长度:\n");
scanf_s("%d", &x, 1);
CreateList_w(L, x);
PrintList(L);
break;
case 8:
PrintList(L);
break;
default:
return OK;
}
}
}
如果你也是初学者希望本篇文章对你有所帮助,程序有许多的缺陷,如果有不懂得地方希望评论出来 我们互相学习哈。![图片抱歉哈](https://img-blog.csdnimg.cn/20201122151955856.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81Mjc5NDYyMg==,size_16,color_FFFFFF,t_70#pic_center)