链表
print?/*链表*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIST_SUCCESS 0
#define LIST_ERROR -1
typedef struct student
{
char name[20];
int chinese;//语文成绩
int math;//数学成绩
struct student* next;
}STU;
//初始化list,第一个节点不用来存放数据
int init_list(STU** head)
{
if( NULL!=*head )
{
printf("链表初始化错误!/n");
return LIST_ERROR;
}
*head=(STU*)malloc(sizeof(STU));
if( NULL==*head )
{
printf("分配空间出错!/n");
return LIST_ERROR;
}
(*head)->next=NULL;
printf("初始化完毕!/n");
return LIST_SUCCESS;
}
//向list策插入节点元素
int insert_node(STU* stu, STU* head)
{
if( NULL==head )
{
printf("链表还没有初始化,无法插入节点!/n");
return LIST_ERROR;
}
while(NULL!=head->next)
{
head=head->next;
}
head->next=(STU*)malloc(sizeof(STU));
if( NULL==head )
{
printf("分配内存错误!/n");
return LIST_ERROR;
}
head=head->next;
strncpy(head->name, stu->name, 20);
head->chinese=stu->chinese;
head->math=stu->math;
head->next=NULL;
printf("插入节点成功!/n");
return LIST_SUCCESS;
}
//按数学成绩递增的顺序插入节点元素
int insert_node_sorted(STU* stu, STU* head)
{
if( NULL==head )
{
printf("链表还没有初始化,无法插入节点!/n");
return LIST_ERROR;
}
STU* pPre=head;
STU* pCur=pPre->next;
STU* new=(STU*)malloc(sizeof(STU));
strncpy(new->name, stu->name, 20);
new->chinese=stu->chinese;
new->math=stu->math;
while(NULL!=pCur)
{
if( new->math>=pCur->math )
{
pPre->next=new;
new->next=pCur;
return LIST_SUCCESS;
}
pPre=pCur;
pCur=pCur->next;
}
pPre->next=new;
new->next=NULL;
return LIST_SUCCESS;
}
//删除节点,以学生名字匹配
int remove_node(const char* name, STU* head)
{
STU* temp;
if( NULL==head )
{
printf("链表还没有初始化,无法删除节点!/n");
return LIST_ERROR;
}
while( NULL!=head->next )
{
if( 0==strcmp(head->next->name, name) )
{
temp=head->next;
head->next=head->next->next;
free(temp);
printf("删除节点成功!/n");
return LIST_SUCCESS;
}
head=head->next;
}
printf("没有找到要删除的节点!/n");
return LIST_ERROR;
}
//遍历链表,返回匹配到的节点
STU* travel_list(const char* name, STU*head)
{
if( NULL==head )
{
printf("链表还没有初始化,无法遍历链表!/n");
&n
补充:软件开发 , C++ ,