线性表,顺序表,链表是三个不同概念,只不过重复的部分很多
课上讲的东西叫链表,实际上和做作业需要用的没什么区别
本实训拿到之后可能会懵逼,因为它的main函数没了,其实是放在文件夹里
测评的时候执行main函数,main里面调用你写的这个节点类型函数
//
节点与结点没什么严格区分
接下来是他的头文件,linerlist.h
#include <iostream>
using namespace std;
// 定义结点结构
struct node
{
int data; // 数据域
node * next; //指针域,指向下一个结点
};
// 函数insertTail:链表尾部插入
// 参数:h-链表头指针,t-指向要插入的结点
// 返回值:插入结点后链表的首结点地址
node *insertTail(node *h, node *t);
// 函数printList:输出链表,每个数据之间用一个空格隔开
// 参数:h-链表头指针
void printList(node *h);
// 函数delList:删除链表,释放空间
// 参数:h-链表头指针
void delList(node *h);
这个头文件里引用了iostream,所以下一次include<linerlist.h>就不用再写iostream了
接下来是测评时执行的,包含了main函数
#include "linearList.h"
int main()
{
int n,i;
node *t;
node *head=NULL; // 头指针为NULL,表示线性表为空,结点数为0
// 输入结点数
cin>>n;
for(i=0;i<n;i++)
{
// 为新节点动态分配空间
t = new node;
cin>>t->data; // 输入结点数据
t->next=NULL; // 结点指针域值为空
// 调用函数插入结点
head = insertTail(head, t);
}
// 输出链表
printList(head);
// 删除结点,释放空间
delList(head);
return 0;
}
// 函数delList:删除链表,释放空间
// 参数:h-链表头指针
void delList(node *h)
{
node *p=h; // 指针p指向头结点,第一个要删除的结点
while(p) // 这个结点是存在的
{
h = h->next; // 头指针h指向下一个结点(下一个结点的地址存在当前结点的指针域中,即h->next中
delete p; // 删除p指向的结点
p = h; // p指向当前的头结点,即下一个要删除的结点
}
}
// 函数printList:输出链表,每个数据之间用一个空格隔开
// 参数:h-链表头指针
void printList(node *h)
{
cout<<"List:";
while(h)
{// h为真,即h指向的结点存在,则输出该结点的数据
cout<<" "<<h->data; // 输出结点数据
h=h->next; // 将该结点的指针域赋值给h,h就指向了下一个结点
}
cout<<endl; // 输出换行符
}
所以你只需要编写一个函数,inserttail,用于在函数尾部插入值
其实很好写
#include "linearList