#include "stdio.h"
#include "stdlib.h"
#include "malloc.h"
typedef struct nodes//链表主体结构
{
int data;//链表DATA区域
struct nodes *next;//链表指针区域
}node,*pnode;
pnode creat()//创建链表头节点和主体节点
{
int i=0,data;
pnode phead=NULL,pnew,ptail;
start:
i++;
printf("给第%d个节点赋值(输入0完成链表建立)请输入:",i);
scanf("%d",&data);
head:
if(!data)//判断输入是否为0,为0完成链表建立
{
printf("链表建立完成!\n");
return phead;
}
if(!(pnew=malloc(sizeof(node))))//分配链表节点内存空间
{
printf("分配内存错误!!!");
exit(0);
}
if(!phead)//生成头节点
{
phead=ptail=pnew;
goto head;
}
pnew->data=data;//给新节点赋值
ptail->next=pnew;//把新节点挂载到尾节点
pnew->next=NULL;//新节点指针置为空
ptail=pnew;//把新节点记录为尾节点
goto start;
}
int print(pnode phead)//读取链表,空返回0,不空返回链表长度
{
int sum=0;
pnode p = phead->next;
if(!p)
{
return 0;
}
else
{
printf("链表的值为:");
while(p)//判断是不是尾节点
{
printf(" %d",p->data);//输出节点值
p=p->next;//把指针指向下一节点
sum++;//计算长度
}
printf("\n");
printf("链表的长度为:%d\n",sum);
return sum;
}
}
insert(pnode p,int find,int val)//加入一个节点,find为插入节点位置
{
int i;
pnode ptail,pnew;
for(i=0;p&&i<find-1;i++)
{
p=p->next;
}
if(p)
{
if(!(pnew=malloc(sizeof(node))))//创建一个新的动态节点
{
printf("分配内存错误!!!");
exit(0);
}
pnew->data=val;
ptail=p->next;
p->next=pnew;
pnew->next=ptail;
}
else
{
printf("输入插入节点溢出!!!");
exit(0);
}
return;
}
remove(pnode p,int find)//弹出一个节点
{
int i;
pnode q;
for(i=0;p->next&&i<find-1;i++)
{
p=p->next;
}
if(p->next)
{
q=p->next;
p->next=p->next->next;
printf("删除节点的值为:%d\n",q->data);
free(q);
q=NULL;
}
else
printf("删除失败!!!\n");
}
sort(pnode phead,int sum)//排序
{
int i,j;
pnode p,q;
for(i=0,p=phead->next;p->next;p=p->next,i++)
for(j=i+1,q=p->next;j<sum;q=q->next,j++)
{
if(p->data>q->data)
{
q->data^=p->data;
p->data^=q->data;
q->data^=p->data;
}
}
return;
}
del(pnode p)
{
pnode temp;
while(p)
{
temp=p;
p=p->next;
free(temp);
}
return;
}
int main(void)
{
pnode phead=NULL;//链表头节点指针
int sum=0;//链表长度
phead=creat();//创建链表
//insert(phead,4,55);//在第四节点的位置插入值为55的节点
//remove(phead,3);//删除第三节点
//(sum=read(phead))?sort(phead,sum):printf("链表为空!无法排序\n");//对链表进行排序
print(phead)?printf("完毕!!!\n"):printf("链表为空!!!\n");//读取链表值和长度
//del(phead);//删除整个链表
return 0;
}
非循环单向链表-增删改查排-释放
最新推荐文章于 2014-01-18 20:50:49 发布