先科普一下线性表的相关知识。线性表,即由n个性质相同的数据元素组成的有序序列。线性表是最基础的线性结构,也是最基本的数据结构形式。因此学好线性表,也是学习其余数据结构的基础。
而线性表分为两类:顺序表和链表。
顺序表的最大特点,既存储该表数据元素的存储单元是连续的(话说这为什么算“顺序”啊……)。而链表则与之相反,是一种靠指针链接的,用任意存储单元存储数据元素的表,指针,就是该类表的“链”。而两表当中,链表的使用居多(至少凭我目前短浅的阅历是没怎么用过顺序表的)。
所以,相较于顺序表而言,链表的应用居多,这里就以多项式加法为例说明。
首先给出多项式加法的链表结构体:
typedef int DataType;
struct Node
{
DataType
num;
DataType
modulus;
struct
Node* next;
} ;
typedef struct Node *PNode;
typedef struct Node *LinkList;
需要注意,三个typedef的作用:第一个typedef是为了可以更轻松的更改链表的存储元素结构,下面程序凡是涉及到链表存储元素时,都用其后面的DataType代替,这样一来,当之后需要更改链表存储元素结构时,可以直接从最上方的typedey入手,省时省力(当然输出函数里的还是需要注意的就是啦)。下方的两个typedef,一是为了简化定义变量的繁琐的关键字,二是便利其他的程序员阅读该程序,可以轻易的分清定义变量的作用。
该结构体中只定义了两个数字,num用于表示多项式系数,modulus则是表示第一个指数,当然这里直接将该多项式默认为了一元多项式,后续可以视情况增加。
随后是创建链表:
LinkList GreatList(LinkList head)
{
PNode
cur=NULL;
PNode
tail=head;
DataType
data1,data2;
scanf("%d,%d",&data1,&data2);
while(data1
!= 0 || data2 != 0)
{
cur=(struct
Node*)malloc(sizeof(struct Node));
cur->num=data1;
cur->modulus=data2;
tail->next=cur;
tail=cur;
tail