今上午老师布置的作业,很不情愿的写了个单链表。。。发现长时间不写确实很难一步写对,调试了20分钟,可算是写完了,
感觉应该是对了,测了几组数据没啥问题.....
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <malloc.h>
using namespace std;
//链表数据类型
struct List{
int data;
List * next;
};
//链表初始化
List* init()
{
return NULL;
}
//链表的创建
List* Create (List* L)
{
if(L)
{
printf("链表未初始化\n");
return NULL;
}
L=(List*)malloc(sizeof(List));
L->next=NULL;
printf("请输入链表长度: ");
int len;
List* p=L;
scanf("%d",&len);
printf("请按递增的顺序输入元素\n");
for (int i=0;i<len;i++)
{
int data;
scanf("%d",&data);
List* New=(List*)malloc(sizeof(List));
New->data=data;
New->next=NULL;
p->next=New;
p=New;
}
return L;
}
//求链表的长度
void List_Len (List* L)
{
if(L==NULL)
{
printf("链表未创建\n");
return;
}
int len=0;
List* p=L->next;
while (p)
{
p=p->next;
len++;
}
printf("链表的长度为%d\n",len);
}
//遍历单链表
void Traverse (List* L)
{
if(L==NULL)
{
printf("链表未创建\n");
return;
}
List* p=L->next;
printf("链表元素如下:\n");
while (p)
{
printf("%d%c",p->data,p->next==NULL?'\n':' ');
p=p->next;
}
}
//插入元素
bool Insert (List* L)
{
if(L==NULL)
{
printf("链表还未创建\n");
return false;
}
printf("请输入想要插入的元素: ");
int Data;
scanf("%d",&Data);
List* p=L;
while (p->next&&p->next->data<Data)
{
p=p->next;
}
List* New=(List*)malloc(sizeof(List));
New->data=Data;
New->next=p->next;
p->next=New;
return true;
}
int main()
{
List* Head;
Head=init();
Head=Create(Head);
Traverse(Head);
List_Len(Head);
if(Insert(Head))
printf("插入成功\n");
else
printf("插入失败\n");
Traverse(Head);
List_Len(Head);
return 0;
}
/*
运行结果如下:
请输入链表长度: 3
请按递增的顺序输入元素
1 2 3
链表元素如下:
1 2 3
链表的长度为3
请输入想要插入的元素: 4
插入成功
链表元素如下:
1 2 3 4
链表的长度为4*/