C语言 链表的基本操作实现 源码

1 创作初衷
 
作为一个毕业半年,到公司上班的菜鸟程序猿,却还没有参与过一次实际的项目开发,没有跟着项目写过一行代码,
每天除了自学,就是做做文档之类的工作。所以在此,把之前学过的知识重新拿起来,写成文章。
  本文属于作者 原创,转载请注明出处!哦,也许并没有人能看上。好了,不说废话了。
  
2 主要内容
 
这次简单的回顾一下 C语言 链表的基本操作,如果诸位看众 发现有什么错误,请不吝赐教。
C语言的链表操作,相对而言,还是比较简单的,这里我以学生为例:

2.1 链表结构体
 
typedef struct pNode  //链表结构体,以学生为例,包含学号、姓名、成绩
{
        int num; // 学号
int score; //成绩
  char* name;//姓名
pNode * next;
}*pNode1;

2.2 创建链表
bool ListCreate() //创建链表
{
pHead = (pNode) malloc(sizeof(pNode));

if(NULL == pHead)
{
return false;
}
pHead->num = 0;
pHead->score = 0;
pHead->name = NULL;
return true;
}
2.3 添加节点
bool ListAdd(pNode pnode) //添加节点
{
if(NULL == pHead)
{
return false;
}
else
{
pNode1 p = pHead->next;
pNode1 q = pHead:

while(NULL != p )
{
q = p;
p = p->next;  
}
q->next = pnode;
pnode->next=NULL;
}
return true;
}
2.4 显示全部节点信息
bool ListShowAll() //显示全部节点
{
if(NULL == pHead)
{
return false;
}
pNode1 p = pHead->next;
while(NULL != p)
{
printf("学号为%d的%s同学,本次成绩为%d分\n",p->num,p->name,p->score);
p=p->next;
}
return true;
}
2.5 按学号显示指定节点信息
bool ListShow(int num) //显示指定学号的节点
{
if(NULL == pHead)
{
return false;
}
pNode1 p = pHead;
while(NULL != p )
{
if(p->num == num)
{
printf("学号为%d的%s同学,本次成绩为%d分\n",p->num,p->name,p->score);
return true;
}
p=p->next;
}
printf("无此学号!\n");
return true;
}
2.6 删除指定学号的节点
bool ListDel(int num) //删除指定学号的节点
{
if(NULL == pHead)
{
return false;
}
pNode1 p = pHead;
pNode1 q = NULL;
while(NULL != p)
{
q = p;
if(p->next->num == num)
{
q->next = p ->next->next;
free(p);
return true;
}
p = p->next;
}
printf("无此学号!\n");
return true;
}
2.7 修改指定学号的节点
bool ListModify(int num) //修改指定学号的节点
{
if(NULL == pHead)
{
return false;
}
pNode1 p = pHead;
while(NULL != p )
{
if(p->num == num)
{
int score;
printf("学号为%d的%s同学,本次成绩为%d分\n",p->num,p->name,p->score);
printf("请输入新的分数:");
scanf("%d",&score);
p->score = score;
printf("修改后:\n学号为%d的%s同学,本次成绩为%d分\n",p->num,p->name,p->score);
return true;
}
p=p->next;
}
printf("无此学号!\n");
return true;
}
2.8 排序
void ListSort()  
{  
    //冒泡排序  
    pNode* phead = pHead;  
    if(pHead == NULL)  
    {  
        return;  
    }  
    if(phead->next == NULL)  
    {  
        return;  
    }  
    pNode1 pi = phead->next;  
    pNode1 pj = pi->next;  
    for(;pi != NULL;pi=pi->next)  
    {  
        for(pj = pi->next;pj != NULL;pj=pj->next)  
        {  
            if(pj->score>pi->score)  
            {  
                pNode1 tmp = pj;  
                pj = pi;  
                pi = tmp;  
            }  
        }  
    }  
}  
2.9 删除链表
void ListDestroy()   //删除链表
{  
    if(NULL == pHead)  
    {  
        return;  
    }  
    if(NULL == pHead->next)  
    {  
        free(pHead);  
        pHead = NULL;  
        return;  
    }  
    pNode* p = pHead->next;  
    while(NULL != p)  
    {  
        pNode* tmp = p;  
        p = p->next;  
        free(tmp);  
    }  
    free(pHead);  
    pHead = NULL;  
}  

3 总结
 
本次只是使用C语言 实现 链表的几个基本操作,所有功能模块都已测试通过,如有需要完整源码的,可与我联系。

  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值