# include <stdio.h>
# include <stdlib.h>
typedef struct note
{
int data;
struct note * pNext;
}* PNODE,NODE;
PNODE Create_List(void);
void Traverse_List(PNODE);
bool Is_Empty(PNODE);
int Length_List(PNODE);
bool Insert_List(PNODE,int,int);
bool Delete_List(PNODE,int,int*);
void Sort_List(PNODE);
int main()
{
PNODE pHead=Create_List();
Traverse_List(pHead);
if (Is_Empty(pHead))
{
printf("链表为空!\n");
}
int len=Length_List(pHead);
printf("链表长度为:%d!\n",len);
Sort_List(pHead);
Traverse_List(pHead);
Insert_List(pHead,5,99);
Traverse_List(pHead);
int val;
if (Delete_List(pHead,1,&val))
{
printf("您删除的数值为:%d\n",val);
}
Traverse_List(pHead);
return 0;
}
PNODE Create_List(void)
{
int len,val;
PNODE pHead=(PNODE)malloc(sizeof(NODE));
pHead->pNext=NULL;
PNODE p=pHead;
if(NULL==pHead)
printf("pHead动态内存分配失败!\n");
else
{
printf("请输入链表的个数:");
scanf("%d",&len);
for (int i=0;i<len;++i)
{
printf("\n请输入第%d个数值:",i+1);
scanf("%d",&val);
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if (NULL==pNew)
{
printf("pNew动态内存分配失败!\n");
}
pNew->data=val;
pNew->pNext=NULL;
p->pNext=pNew;
p=pNew;
}
}
return pHead;
}
void Traverse_List(PNODE pHead)
{
PNODE p=pHead;
while(NULL!=p->pNext)
{
p=p->pNext;
printf("%d ",p->data);
}
printf("\n");
}
bool Is_Empty(PNODE pHead)
{
if (NULL==pHead->pNext)
{
return true;
}
return false;
}
int Length_List(PNODE pHead)
{
int len=0;
PNODE p=pHead;
while(NULL!=p->pNext)
{
p=p->pNext;
len+=1;
}
return len;
}
void Sort_List(PNODE pHead)
{
int i,j,t;
PNODE p,q;
int len=Length_List(pHead);
for (i=0,p=pHead->pNext;i<len-1;++i,p=p->pNext)
{
for (j=i+1,q=p->pNext;j<len;++j,q=q->pNext)
{
if (p->data>q->data)
{
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
}
bool Insert_List(PNODE pHead,int pos,int val)
{
PNODE p=pHead,q;
int i=0;
while (NULL!=p && i<pos-1)
{
p=p->pNext;
++i;
}
if (i>pos-1 || NULL==p)
return false;
PNODE pNew=(PNODE)malloc(sizeof(NODE));
if (NULL==pNew)
{
printf("Insert pNew动态内存分配失败!\n");
return false;
}
else
{
pNew->data=val;
q=p->pNext;
pNew->pNext=q;
p->pNext=pNew;
}
return true;
}
bool Delete_List(PNODE pHead,int pos,int* val)
{
PNODE p=pHead,q;
int i=0;
while (NULL!=p && i<pos-1)
{
p=p->pNext;
++i;
}
if (i>pos-1 || NULL==p)
return false;
*val=p->pNext->data;
q=p->pNext->pNext;
free(p->pNext);
p->pNext=q;
return true;
}
数据结构之链表
最新推荐文章于 2023-02-12 10:49:16 发布