#include
#include
#include
using namespace std;
typedef struct
{
unsigned long int ID; //课程代码
string lesson; //课程名字
double credit; //学分
int term; //开课学期
}Lessons,*pLessons;
typedef struct node //一个结点的数据类型
{
Lessons data;
node *next;
}NODE,*pNODE;
pNODE LinkList_Init() //创建一个空链表
{
NODE *p;
p=new NODE;
if(p==NULL)
{
cout<<"内存不足!";
exit(0);
}
p->next=NULL;
return p;
}
int LinkList_Length(pNODE head)
{
int Count=0; //计数器:存放表长
pNODE p=head->next;
while(p!=NULL)
{
Count++;
p=p->next;
}
return Count;
}
pNODE makeList(int n,ifstream &in) //尾插法生成链表(带头结点)
{
pNODE head=LinkList_Init(); //生成空表
pNODE tail=head; //尾插法
pNODE node; //一个结点(数据域+指针域)
Lessons data; //一个结点的数据(一条记录)
for(int i=0;i
{
in>>data.ID;
in>>data.lesson;
in>>data.credit;
in>>data.term;
//----------尾插法生成链表--------------
node=new NODE;
node->data=data; //结点赋值
tail->next=node; //连入链表
tail=node; //尾结点移位
}
tail->next=NULL;
return head;
}
int LinkList_Print(pNODE head) //显示结点数据
{
pNODE p=head->next;
while(p!=NULL)
{
cout<data.ID<
coutdata.lesson<
coutdata.credit<
coutdata.term<
p=p->next;
}
return 0;
}
pNODE List_Locate(pNODE head,string lesson)
{ //按课程名称查找
pNODE p=head->next;
while(p!=NULL&&p->data.lesson!=lesson)
p=p->next;
if(p==NULL)
return NULL; //没找到
return p; //返回该结点指针
}
pNODE List_Prior(pNODE head,string lesson) //查找前一个结点
{
pNODE p=head;
while(p->next!=NULL&&p->next->data.lesson!=lesson)
p=p->next; //p为前一个结点
if(p->next==NULL)
return NULL;
return p;
}
pNODE link_Insert(pNODE head,pNODE s)
{
pNODE p=head;
while(p->next!=NULL&&s->data.lesson>p->next->data.lesson)
p=p->next;
s->next=p->next;
p->next=s;
return head;
}
pNODE link_Delete(pNODE head,string lesson) //删除某结点
{
pNODE p=head,s;
while(p->next!=NULL&&p->next->data.lesson!=lesson)
p=p->next;
if(p->next==NULL)
return head;
s=p->next;
p->next=s->next;
delete s;
return head;
}
void LinkList_Free(pNODE head) //删除整个链表
{ //每次删除表头
pNODE p;
while(head)
{
p=head;
head=head->next;
delete p;
}
}
int main()
{
int RecNum; //文件中的记录数
ifstream infile("大三课程.txt"); //打开文件
char *temp=new char[1024];
infile>>temp; //读不用的信息
infile>>RecNum;
infile.getline(temp,1024,'\n');
infile.getline(temp,1024,'\n');
delete[] temp;
pNODE head=makeList(RecNum,infile); //创建链表
infile.close(); //关闭文件
int n=LinkList_Length(head);
cout<<"结点个数:"<
cout
pNODE node=List_Locate(head,"数据库系统");
coutdata.ID<<" "<data.lesson<
cout
link_Delete(head,"计算机组成原理");
n=LinkList_Length(head);
cout
cout
Lessons one={6015039,"数学建模",2,7};
pNODE newNode=new NODE; //新创建一个结点
newNode->data=one;
newNode->next=NULL;
link_Insert(head,newNode);
n=LinkList_Length(head);
cout<<"结点个数:"<<n<<endl;
LinkList_Free(head);
cout<<"表头结点地址:"<<head<<endl;
system("pause");
return 0;
}