前言
链表是连续存储的一种形式,实现链表的功能,便于我继续深入学习数据结构与算法
一、链表
链表相对于数组而言,具有空间没有限制,插入删除元素很快,缺点是存取的速度很慢
二、代码
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct Node
{
int date;//数据域
struct Node *PNext;//指针域
}NODE,*PNODE;
PNODE create_list();//创建一个非循环单变量链表
void traverse_list(PNODE PHead);//遍历链表
bool is_empty(PNODE PHead);//判断链表是否为空
void length_list(PNODE PHead);//求链表长度
bool insert_list(PNODE PHead,int position,int date_num);//在第position个节点前插入一个date_num数据的节点
bool delete_list(PNODE PHead,int position);
void sort_list(PNODE PHead);
int main()
{
PNODE PHead=NULL;
PHead=create_list();
sort_list(PHead);
/*if(is_empty(PHead))
printf("链表为空!\n");
else
printf("链表不为空!\n");
length_list(PHead);
if(insert_list(PHead,3,6))
printf("插入成功!\n");
else
printf("插入失败!\n");
if(delete_list(PHead,3))
printf("删除成功!\n");
else
printf("删除失败!\n");
*/
traverse_list(PHead);
return 0;
}
PNODE create_list()
{
int i,val,len;
PNODE PHead=(PNODE)malloc(sizeof(NODE));
PNODE PTail=PHead;
PTail->PNext=NULL;
printf("请您输入节点长度:");
scanf("%d",&len);
for(i=0;i<len;i++)
{
printf("请输入第%d个节点的值=",i+1);
scanf("%d",&val);
PNODE PNew=(PNODE)malloc(sizeof(NODE));
PNew->date=val;
PTail->PNext=PNew;
PNew->PNext=NULL;
PTail=PNew;
}
return PHead;
}
void traverse_list(PNODE PHead)
{
PNODE P=PHead->PNext;
while(NULL!=P)
{
printf("%d\n",P->date);
P=P->PNext;
}
return;
}
bool is_empty(PNODE PHead)
{
if(NULL==PHead->PNext)
return true;
else
return false;
}
void length_list(PNODE PHead)
{
int count=0;
PNODE P=PHead->PNext;
while(NULL!=P)
{
++count;
P=P->PNext;
}
printf("链表长度=%d\n",count);
return;
}
bool insert_list(PNODE PHead,int position,int date_num)
{
int i=0;
PNODE p=PHead;
while(NULL!=p&&i<position-1)
{
p=p->PNext;
i++;
}
if(NULL==p||i>position-1)
return false;
PNODE PNew=(PNODE)malloc(sizeof(NODE));
if(NULL==PNew)
{
printf("动态分配内存失败\n");
exit(-1);
}
PNODE q=p->PNext;
PNew->date=date_num;
p->PNext=PNew;
PNew->PNext=q;
return true;
}
bool delete_list(PNODE PHead,int position)
{
int i=0;
PNODE p=PHead;
while(NULL!=p->PNext&&i<position-1)
{
p=p->PNext;
i++;
}
if(NULL==p->PNext||i>position-1)
return false;
PNODE PNew=(PNODE)malloc(sizeof(NODE));
if(NULL==PNew)
{
printf("动态分配内存失败\n");
exit(-1);
}
PNODE q=p->PNext;
p->PNext=q->PNext;
free(q);
return true;
}
void sort_list(PNODE PHead)
{
int val;
PNODE p=PHead->PNext;
for(;NULL!=p->PNext;p=p->PNext)
{
for(PNODE q=p->PNext;NULL!=q;q=q->PNext)
{
if(p->date>q->date)
{
val=p->date;
p->date=q->date;
q->date=val;
}
}
}
}
总结
学习书本上的数据结构与算法,并自己实现,加深印象。