用c语言链表排序写,支持按学号排序,添加,删除,查找功能,或根据以下的改下不能用链表,急在线等大神

Copyright (C) , , All Rights Reserved&&&&&&浙ICP备号-4C语言链表操作模板(添加,删除,遍历,排序) - 推酷
C语言链表操作模板(添加,删除,遍历,排序)
C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式。当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的。
/*********************************
代码摘自郝斌C语言视频的链表部分
简单修改为纯C格式
#include &stdio.h&
#include &malloc.h&
#include &stdlib.h&
typedef struct Node {
struct Node *pN
}NODE, *PNODE;
PNODE create_list(void);
void traverse_list(PNODE pHead);
int is_empty(PNODE);
int length_list(PNODE);
void sort_list(PNODE);
int insert_list(PNODE, int, int);
int delete_list(PNODE, int, int *);
int main()
PNODE pHead = NULL;
pHead = create_list();
traverse_list(pHead);
//is_empty(pHead);
//cout && &链表中的节点个数为:& && length_list(pHead) &&
//sort_list(pHead);//链表排序
//insert_list(pHead, 4, 33);
//traverse_list(pHead);//读取链表
//sort_list(pHead);//链表排序
int Val = 0;
if(delete_list(pHead, 4, &Val)) {
printf(&删除节点成功,删除的元素是: %d&, Val);
printf(&删除失败\n&);
traverse_list(pHead);//读取链表
PNODE create_list(void)
int i, len,
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if(NULL == pHead) {
printf(&头结点内存分配失败,退出程序&);
printf(&请输入创建节点的个数:len = &);
scanf(&%d&, &len);
PNODE pTail = pH
pTail-&pNext = NULL;
for(i=0; i& ++i)
printf(&请输入第%d个节点的值: &, i+1);
scanf(&%d&, &val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(NULL == pNew) {
printf(&内存分配失败,退出程序&);
system(&pause&);
pNew-&date =
pTail-&pNext = pN
pNew-&pNext = NULL;
pTail = pN
void traverse_list(PNODE pHead)
PNODE p = pHead-&pN
while(p != NULL) {
printf(&%d &, p-&date);
printf(&\n&);
int is_empty(PNODE pHead) {
if(NULL == pHead-&pNext) {
printf(&链表为空!\n&);
printf(&链表不为空!\n&);
int length_list(PNODE pHead) {
int len = 0;
PNODE p = pHead-&pN
while(p != NULL) {
void sort_list(PNODE pHead) {
int len = length_list(pHead);
for(i=0,p=pHead-&pN i&len-1; ++i, p=p-&pNext) {
for(j=i+1,q=p-&pN j& ++j,q=q-&pNext) {
if(p-&date & q-&date) {
p-&date = q-&
int insert_list(PNODE pHead, int pos, int val) {
int i = 0;
PNODE p = pH
while(p != NULL && i & pos-1) {
if(i & pos-1 || p == NULL)
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL) {
printf(&动态申请内存失败\n&);
pNew-&date =
pNew-&pNext = p-&pN
p-&pNext = pN
int delete_list(PNODE pHead, int pos, int *pVal) {
int i = 0;
PNODE p = pH
while(p-&pNext != NULL && i & pos-1) {
if(i & pos-1 || p-&pNext == NULL)
PNODE q = p-&pN
*pVal = q-&
p-&pNext = p-&pNext-&pN
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)_百度知道
c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)
姓名.可根据学号或姓名删除学生信息4.可根据学号或者姓名查询该学生的所有信息并输出3、成绩.可任意添加学生信息2。1.可根据学号或成绩进行排序并输出5C语言~~~~~~~~不要C++
建立一个学生信息链表,包括学号
提问者采纳
返回查找到的指针
}/n&quot!=NULL&&p-&
/请输入要查找学生的学号,p-&);
while(p,p-&
printf(&quot:&#92:\ while(1) {
free(p1);num==num_x)
p2-&struct student *search(struct student *head) {
struct student *p=head-&next=NULL;n& head=create_head(););num找不到 运行出错
p=p-&gt,若s最大;/*定义结构体*//);
while(p-&gt:
print(head);void free_list(struct student *head) {
struct student *p=head !;找到符合条件的结点\n&D'特别注意&&左右条件不能调换;next=NULL;
while(p1;num运行出错
printf(&quot:\next==NULL) //
case'/特别注意两个if不能调换;
printf(&score),p-&gt,并返回链表的首指针*//num运行出错
p2=p1;*释放链表*/
if(p==NULL)
struct student *
scanf(&特别注意两个if不能调换;连接结点
& };找不到符合条件的结点;
printf(&quot!;;n&
case&#39!=NULL)
printf(&给p赋值
insert(head, *p2=head :
free_list(head);释放链表,int num_x) {
struct student *p1=head-&结点删除成功;/
return head.1f\
p1=p1-&gt,struct student *s) {
struct student *p=head:\&#47!\n&&#47、更多交流可参考我空间主页有关文章;
return head,num),&score);next-&
head=(struct student*)malloc(sizeof (struct student) );n&找不到符合删除要求的结点;);n该结点为%d\
p-&#include&
delete_note(
if(p1==NULL)
/next ,使链表保持升序;
if(p==NULL)
printf(&*输出链表各结点的值:插入结点(自动升序)
P;score);n&
return NULL;num=num。2;);申请头结点失败:
\/ printf(&
p=head-&gt!&#92,p-&gt,p-&
exit (0) ;void print(struct student *head) {
struct student *p;),若写反最后p指向NULL时p-&/
n&/n&,&num);释放链表成功;;);n&
free(p)、#include& }/I'next=s,&;num运行出错
printf(&插入成功;%d\)!\%d%f&
while(p;struct student *delete_note(struct student *);
链表如下;%d&*将s指向的结点插入链表;struct student {
printf(&*查找符合条件的结点;
c=getch();score=);S'n&t%;特别注意&&左右不能写反;
/struct student *create_head() {
struct student *n&quot:查找结点
p=p-&void main(){ struct student *p ,p1-&score运行出错
search(head),最后p-&gt.h&;);请输入要删除的学生的学号;连接结点
s-&score&).h&gt:
printf(&特别注意两条件不能写反;*创建一个只有头结点的空链表*&#47,并返回头结点*/;小心别漏这个
/p-&)1,也称对链表的遍历*&#47!\#include&
if(p1-&gt:输出链表
S;申请该结点失败;*完整的有头结点链表操作程序*/有头结点链表操作程序;
case' E&#39:删除结点
return NULL;
float score!=NULL&&p1-&
exit (0);next=p1-&),&num);/next就等于NULL
printf(&quot!=num_x)
&#47!\
printf(&:\
break!; }/next,并返回指向该结点的指针*&#47,若调换如果p1指向NULL时p1-&&#47!&#92,若调换最后p指向NULL时p-& }&#47!=NULL)
head=head-&P'
p=(struct student*)malloc( sizeof(struct student) )!& &#47!;
if(head==NULL)
/!,若调换如果p1指向NULL时;/score)&#47!=num)
/;num==num)
printf(&quot:释放链表并退出程序;其实两种情况可以并在一块写
p-&score最大的情况
scanf(&&#47, *
p-&gt,p);请分别输入要插入学生的学号和分数;struct student *insert(struct student *head.h&
case' float score !=NULL&&s-&n&I;
} }/next=s;p-&*删除链表中值为num的结点;next-&t%f&查找不到返回空指针
if(p-&next=NULL;s-&next=p-&
提问者评价
其他类似问题
为您推荐:
链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言链表,学生管理系统_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
C语言链表,学生管理系统
C​语​言​链​表​,​学​生​管​理​系​统​,​实​现​了​数​据​的​添​加​,​删​除​,​查​找​,​排​序​等​、​、​、
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢DoubleList 用类定义一个双向链表,并 的排序插入,删除和输出操作的成员 ,可以实 Console 控制台编程 238万源代码下载-
&文件名称: DoubleList
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 5 KB
&&上传时间:
&&下载次数: 30
&&提 供 者:
&详细说明:用类定义一个双向链表,并定义双向链表的排序插入,删除和输出操作的成员函数,可以实现依据姓名查找结点及修改结点数据的功能,把记录以通讯录形式保存在磁盘上。-Class definition with a two-way linked list, and define the order of two-way linked list insert, delete, and member functions of the output operation can be achieved based on the names to find and modify node data node to the form of records to address book stored in the disk .
文件列表(日期:~)(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&[]:很好,推荐下载
&相关搜索:
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 实现通讯录管理系统,C语言程序编译,主要有有关链表,及外部文件的内容
&[] - 双链表正排序
&[] - 1.双向链表的初始化
2.双向链表的尾插法建立
3.双向链表插入结点
4.双向链表删除结点
5.双向链表遍历链表
6.双向链表按不同的属性查找节点
7.双指针查找节点
&[] - 用双向链表,文件读写的知识编写简单的通讯录,可记录姓名、性别、出生年月日、邮编、地址、电话号码等内容。可从第一条显示、从最后一条显示,可实现上翻下翻浏览。可进行添加、删除、插入、查找、保存、退出等通讯录的基本操作。界面友好,输入输出更具人性化,实现键盘响应,有操作提示,便于使用者上手操作。
&[] - 数据结构课程设计――通讯录管理系统Microsoft Visual C++6.0描述
&[] - 这是一个双向链表的问题,在数据结构中很常见,该程序实现了链表的插入、删除、逆置等功能

我要回帖

更多关于 c语言链表排序 的文章

 

随机推荐