c语言链表练习
C++语言程序设计实验报告
实验一 结构体程序设计
一、实验目的
1)掌握结构体类型的概念、定义和使用;
2)掌握结构体中链表的定义和使用;
二、实验内容及步骤
1)实验题目要求
使用结构体类型建立链表,要求设计一个操作界面,在每次输入一个数后,执行相对应的操作。其基本操作包括在链表头部、尾部、某一固定值后插入一个结点,对链表中存在的结点进行修改,对链表中存在的结点进行删除和对所有结点进行清空,选择操作包括对链表中所有的结点进行排序。
。
2)部分程序代码及注释
#include
#include
#define ID_LEN 10
//建立一个结构体
struct Stu
{char id[ID_LEN];
char* name;
int nHeight;
Stu* next;
};
typedef Stu StuLst;
//删除节点操作
void DeleteLst(StuLst* lst)
{ char id[10];
Stu* p=lst,* q=lst->next;
bool b=false;
cout<
cin>>id;
//查看链表中是否存在要删除的学生
while(q)
{if(strcmp(q->id,id) != 0)
q=q->next;
else
{
b=true;
break;
}
}
if(!b)
cout<
if(!lst || !id)
return;
while(b)
{
while(p->next)
{
if(strcmp(p->next->id,id) == 0)
{cout<
//找到了,删除
Stu* q = p->next;
p->next = q->next;
delete q;
break;
}
p = p->next;
}
}
}
//把新的节点插入到链表头部
void InsertToFirst(StuLst* lst)
{ char id[10], name[15];
int nHeight ;
cout<
cin>>id;
cout<
cin>>name;
cout<
cin>>nHeight;
//验证记录是否重复
bool t=true;
Stu* q=lst->next;
while(q)
{
if(strcmp(q->id,id) == 0)
{ cout<
t=false;
break;
}
else
q=q->next;
}
//若以前的链表中无重复的学号时,实现插入新节点操作
while(t)
{
//验证数据是否合法
if(lst==NULL || id==NULL)
return;
//构造新节点
Stu* pSt = new Stu;
//给新节点赋值
pSt->nHeight = nHeight;
strcpy(pSt->id,id);
if(name)
{
pSt->name = new char[strlen(name)+1];
strcpy(pSt->name,name);
}
else
pSt->name = NULL;
//插入到链表第一个位置
pSt->next = lst->next;
lst->next = pSt;
t=false;
}
}
//对链表中是整形类型的数值进行升序排序
void BufferSort(StuLst* lst)
{
Stu* p;
int temp,i,j,n=0;
char strid[10], strname[20];
p=l