#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;
typedef struct student_information
{
int num; //学号
char name[10]; //姓名
} student;
typedef struct chainlist
{
student data;
chainlist *next;
}chainlist;
typedef struct headnode
{
int length;
chainlist *first;
}headnode,*head;
headnode *Creat(headnode *list)
{// 构造一个空链表
list=new headnode;//产生一个仅有表头结点的链表
list->first=NULL;//first的值设为空(NULL)值
list->length=0;
return list;
}
bool insert(headnode *head,int k,student stu1)
{
if (k < 0||k>head->length)
return false;
int index=1;
chainlist *current=head->first;
while(index<k&¤t)
{
index++;
current=current->next;
}
chainlist *q=new chainlist;
q->data=stu1;
if(k>1)
{
q->next=current->next;//next存储current的next current的next指向原来下一个数据的地址 每一个节点有自己的地址,但也存储着下一个节点的地址
current->next=q;//current的next存储q的地址,相当于当前节点指向q
}
else
{
q->next=head->first;
head->first=q;
}
head->length++;
return true;
}
void Output(headnode *head)
{// 逐个地输出链表L中的数据元素
chainlist *current=head->first;
while (current)
{
if(current->data.num!=0)
cout<<current->data.num<<current->data.name<<" ";
current=current->next ;
}
cout<<endl;
}
int main(){
int i=0;
student stu1;
headnode *l;
l=Creat(l);
cout<<"请输入学生数据\n";
while(cin>>stu1.num)
{
if(stu1.num==0)
break;
else
{
cin>>stu1.name;
insert(l,i,stu1);
i++;
}
}
Output (l);
printf("共有学生%d人",i);
}
学生线性表
于 2022-03-19 11:14:03 首次发布