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语言 实现 链表的几个基本操作,所有功能模块都已测试通过,如有需要完整源码的,可与我联系。