#include<stdio.h>
//链表结点
typedef struct node
{
int data;
struct node* next;
}node;
node* creatlinknode(int n);//创建链式队列
void insertlinknode(node* head);//单链表的插入,
//在数据域为num的结点之前插入一个结点
void deletelinknode(node* head, int num);//单链表的删除
//删除数据域尾num的结点
void printnodelink(node* head);//单链表的打印
void destorylinknode(node* head);//单链表的销毁
node* findlinknode(node* head, int num);//查找单链表的指定元素的结点
void test01()
{
int n;
printf(“请输入你想创建的结点的个数\n”);
scanf_s("%d", &n);
node* head = creatlinknode(n);
insertlinknode(head, 10);
printnodelink(head);
int m=findlinknode(head, 2);
if (m != NULL)
{
printf(“找到了\n”);
}
else
{
printf(“没有找到”);
}
int len = lenlinknode(head);
printf(“单链表的长度尾%d\n”, len);
destorylinknode(head);
}
int main(void)
{
test01();
system(“pause”);
return 0;
}
node* creatlinknode(int n)
{
node* head=NULL;
node* p, * q=NULL;
for (int i = 0; i < n; i++)
{
p = (node*)malloc(sizeof(node));
if (!p)
{
printf(“内存分配失败”);
return;
}
p->next = NULL;
printf(“请输入%d个节点值”, i + 1);
scanf_s("%d", &p->data);
if (head == NULL)
{
head = p;
q = p;
}
else
{
p->next = q->next;
q->next = p;
}
}
return head;
}
//单链表的插入(在表尾进行插入)
void insertlinknode(nodehead)
{
node
p, * q=head;
p = (node*)malloc(sizeof(node));
if (!p)
{
printf(“内存分配失败\n”);
return;
}
printf(“请输入你要插入的结点的值\n”);
scanf_s("%d", &p->data);
if (head == NULL)
{
p->next = NULL;
head = p;
}
else
{
//for (q = head; q->next != NULL; q++);
while (q ->next!= NULL)
{
q = q->next;
}
p->next = q->next;
q->next = p;
q = p;
printf(“插入完成\n”);
}
}
//删除数据域尾num的结点
//单链表的删除
void deletelinknode(node* head, int num)
{
node* p;
node* q1, * q2;
q1 = head;
q2 = NULL;
while (q1 != NULL && q1->data != num)
{
q2 = q1;
q1 = q1->next;
}
if (q2 == NULL)
{
printf(“删除的是第一个结点\n”);
head = head->next;
}
//删除的不是第一个结点
if (q1 != NULL)//找到了删除的元素
{
q2->next = q1->next;
}
else
{
printf(“已经到了栈尾都没有找到\n”);
return;
}
free(q1);
}
//单链表的打印
void printnodelink(node* head)
{
node* p;
p = head;
while (p )
{
printf("%d\t", p->data);
p = p->next;
}
printf(“打印完成\n”);
}
//单链表的销毁
void destorylinknode(node* head)
{
node* p = head;
node* temp = NULL;
while (p != NULL)
{
temp = p->next;
free§;
p = temp;
}
head = NULL;
printf(“单链表的销毁完成\n”);
}
//查找单链表的指定元素的结点
node* findlinknode(node* head, int num)
{
node* p = head;
while (p != NULL)
{
if (p->data == num)
break;
p = p->next;
}
return p;//返回的可能是空链表或者查找的元素的结点
}
//计算单链表的长度
int lenlinknode(node* head)
{
node* p = head;
int len = 0;
while (p != NULL)
{
p = p->next;
len++;
}
return len;
}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐