| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
 买学问 - 大牛一对一辅导，有问必答 买学问 - 专业的付费知识问答平台

问题点数：0  回复次数：1

得分:0
//Windows7环境 VS2017编译

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>

typedef struct NAME         //自定义名字
{
int data;
struct NAME *next;
} name;
name *creat(int n)     //创建长度为n的单链表
{
for (int i = 0; i < n; i++)
{
node = (name*)malloc(sizeof(name));
printf("第%d个节点的数据域为：", i + 1);
scanf("%d", &node->data);
printf("\n");
end->next = node;
end = node;
}
end->next = NULL;
}
void delet_normal(name*list, int n)    //删除第n个节普通点并释放内存
{
name *in = nullptr;            // in:所删除节点的前节点, t:要删除的节点
name *t = list;
int i = 0;
while (i < n && t != NULL)
{
in = t;
t = t->next;
i++;
}
if (t != NULL)
{
in->next = t->next;
free(t);
printf("删除成功\n");
}
else printf("该链表没有第%d个节点\n", n);
}

//删除表头节点为void delet_normal(name*list, 1)

void delet_tail(name * list)         //删除表尾节点
{
name*t = list;
name *in = nullptr;
while (t->next != NULL) {                 //使t成为尾节点，in 为其前一个节点
in = t;
t = t->next;
}
in->next = NULL;
free(t);
printf("删除成功\n");

}

void inter_normal(name *list, int n, int data)        //在第n个节点之后插入新节点,新节点数据域为data
{
name *t = list; //in:新插入的节点；t:第n个节点
name *in;
int i = 0;
while (i < n&&t != NULL)
{
t = t->next;
i++;
}
if (t != NULL)
{
in = (name*)malloc(sizeof(name));
in->data = data;
in->next = t->next;
t->next = in;
}
else
printf("该链表没有第%d个节点\n", n);
}

//在表头插入节点为void inter_normal(name *list, 0,data)

void inter_tail(name *list, int data)       //在表尾插入节点
{
name *in;                     //in为插入的节点
name *t = list;
while (t->next != NULL)                 //使t成为尾节点
t = t->next;
in = (name*)malloc(sizeof(name));
in->data = data;
t->next = in;
in->next = NULL;
}

void output(name *list)      //遍历输出
{
name *t = list;
t = t->next;
while (t != NULL)
{
printf("【%d】 ", t->data);
t = t->next;
}

printf(" end \n");
}

void search(int aim, name *list)     //查找数据域元素出现的位置
{
bool flag = false;
name *t = list;
t = t->next;
for (int i = 1; t != NULL; t = t->next)
{
if (t->data == aim)
{
printf("第%d个  ", i);
flag = true;
}
i++;
}
if (flag == false)
{
printf("无该元素");
}
printf("\n");
}

{
name *t = list;
int i = 0;
while (i < a&&t != NULL)
{
t = t->next;
i++;
}
if (t == NULL)
{
printf("该链表没有第%d个元素\n", a);
}

else
printf("第%d个元素数据域为%d\n", a, t->data);
}

void change(int a, name*list, int b)       //修改第a个元素的数据域为b
{
name*t = list;
for (int i = 0; i < a; i++)
{
t = t->next;
}
if (t != NULL)
{
t->data = b;
printf("修改成功\n");
}
else
printf("该链表没有第%d个节点", a);
}
int main()
{
name * A = nullptr;
for (;;)
{
printf("选择功能\n1:创建新链表\n2：遍历输出链表数据域\n3：在第n个节点后插入节点\n4：在表头插入节点\n5：在表尾插入节点\n6：删除第n个节点后的节点\n7：删除头节点\n8：删除尾节点\n9：读出链表第n个元素的数据域 \n10：修改第n个节点的数据域\n11：查找数据域为a的节点在链表中的位置\n0：退出\n\n\n");
int choice;
scanf("%d", &choice);
switch (choice)
{
case 1:
int lenth;
printf("新建链表长度为：");
scanf("%d", &lenth);
A = creat(lenth);
break;

case 2:
output(A);
break;

case 3:
int locate, data;
printf("在第几个节点后插入？\n");
scanf("%d", &locate);
printf("插入节点的数据域为：");
scanf("%d", &data);
inter_normal(A, locate, data);
break;

case 4:
printf("插入节点的数据域为：");
scanf("%d", &data);
inter_normal(A, 0, data);
break;

case 5:
printf("插入节点的数据域为：");
scanf("%d", &data);
inter_tail(A, data);
break;

case 6:
printf("删除第n个节点 n为：");
scanf("%d", &locate);
delet_normal(A, locate);
break;

case 7:
delet_normal(A, 1);
break;

case 8:
delet_tail(A);
break;

case 9:
printf("读出第n个节点数据域 n为：");
scanf("%d", &locate);
break;

case 10:
printf("修改第n个节点数据域 n为：");
scanf("%d", &locate);
printf("想要改成：");
scanf("%d", &data);
change(locate, A, data);
break;

case 11:
printf("输入要查找的数据域：");
scanf("%d", &data);
search(data, A);
break;

case 0:
exit(0);
}
}
system("pause");
return 0;
}

• 2
• 1/1页
• 1