/**
* Name:test_1.h
* Description:数据结构学习程序1
* https://www.bilibili.com/video/av18586085?p=1
* 链表的学习代码,从P11到P13 的练习代码
* Author:JianshuZhao
* Version:V1.0.0
* Date:2020.2.16
*/
线性表及其实现
1.1 顺序存储结构直接表示
1.2 顺序存储结构表示非零项
结构数据表示(ai, i),以指数递加的过程排序
1.3 链表结构存储非零项
在此处因为对之前链表的内容早已经忘得一干二净,手边没有C primer plus,因此以谭浩强的书作为链表的知识回顾。
最终实现代码如下,并能够做到充分理解。
/**
* Name:test_1.h
* Description:数据结构学习程序1
* https://www.bilibili.com/video/av18586085?p=1
* 链表的学习代码,从P11到P10 的练习代码
* Author:JianshuZhao
* Version:V1.0.0
* Date:2020.2.16
*/
#include "test_2.h"
int n = 0;
PolyNode_t * CreatDynamicLink()
{
PolyNode_t *head;
PolyNode_t *p1, *p2;
p1 = p2 = (PolyNode_t *)malloc(sizeof(PolyNode_t));
scanf("%d %d", &p1->coef, &p1->expon);
head = NULL;
while (p1->coef != 0)
{
n = n + 1;
if (n == 1)
{
head = p1;
}
else
{
p2->link = p1;
}
p2 = p1;
p1 = (PolyNode_t *)malloc(sizeof(PolyNode_t));
scanf("%d %d", &p1->coef, &p1->expon);
}
p2->link = NULL;
return head;
}
void CreatStaticLink()
{
PolyNode_t Poly1, Poly2, Poly3, *head, *p;
Poly1.coef = 1;
Poly1.expon = 0xAA;
Poly2.coef = 2;
Poly2.expon = 0xBB;
Poly3.coef = 3;
Poly3.expon = 0xCC;
head = (PolyNode_t *)&Poly1;
Poly1.link = (PolyNode_t *)&Poly2;
Poly2.link = (PolyNode_t *)&Poly3;
Poly3.link = NULL;
p = head;
do
{
printf("%d %d\n", p->coef, p->expon);
p = p->link;
} while (p != NULL);
getchar();
}
void PrintLink(PolyNode_t *head)
{
PolyNode_t *pTemp;
if (head != NULL)
{
printf("There are %d members in the Link", n);
pTemp = head;
do
{
printf("\n\nnum:%d, \nscore:%d\n", pTemp->coef, pTemp->expon);
pTemp = pTemp->link;
}while(pTemp != NULL);
system("pause");
}
}
2.1 线性表的定义
其定义如下:
typedef struct{
int Data[MAXSIZE];
int Last;
}LNode_t;
typedef LNode_t* List_t;
extern LNode_t L;
extern List_t PtrL;
常用的操作类型有如下图所示
//初始化一个空线性表
List_t MakeEmpty()
{
List_t PtrL;
PtrL = (List_t)malloc(sizeof(LNode_t));
PtrL->Last = -1;
return PtrL;
}
//在线性表Ptrl中查找x第一次出现的位置
int Find(int x, List_t Ptrl)
{
int i = 0;
while ((i <= PtrL->Last) && Ptrl->Data[i] != x)
{
i++;
}
return (i > PtrL->Last) ? -1 : i;
}