目录
前言:仅为巩固和完善上课内容所作,如有错误感谢指点
作者:hznu_AllanPoeeeeeee
最后编辑时间:2023.11.14
数据的存储结构分为:顺序存储结构和链式存储结构
线性表按存储结构分为:顺序线性表和链式线性表
顺序线性表
①定义结构体;
储存数据的指针(数组),已被存储的数据的长度
typedef struct {
int *data;
int len;
} SeqList;
SeqList List1;
②初始化方法
SeqList InitList(int len){//初始化
SeqList L;
L.len=len;
L.data=(int *)malloc((len) * sizeof(int));
return L;
}
List1=InitList(m1);
③数据插入[直接赋值]
scanf(“%d”,&List1.data[i]);
补充:两个顺序表排序归并
SeqList f(SeqList List1, SeqList List2) {//归并
int i = 0, j = 0, k = 0;
int len1 = List1.len;
int len2 = List2.len;
SeqList ans;
ans=InitList(len1+len2);
while (i < len1 && j < len2) {
if (List1.data[i] <= List2.data[j]) {
ans.data[k++] = List1.data[i++];
} else {
ans.data[k++] = List2.data[j++];
}
}
//剩余数据添加到末尾
while (i < len1) {
ans.data[k++] = List1.data[i++];
}
while (j < len2) {
ans.data[k++] = List2.data[j++];
}
return ans;
}
SeqList ans = f(List1, List2);
链式线性表
①结构体定义;
储存数据的一个单元、指向下个位置的指针域
typedef struct NodeList{
int data;
struct NodeList* next;
}NodeList;
NodeList* List1;
②初始化方法
NodeList* InitList(){//初始化
NodeList* head;
head=(NodeList*)malloc(sizeof(NodeList));
head->next=NULL;
return head;
}
List1=InitList();
③尾插操作方法
void push_back(NodeList* head,int data){//尾插数据
NodeList* Node;
Node= InitList();
Node->data=data;
Node->next=NULL;
NodeList* p=head;
while(p->next!=NULL){
p=p->next;
}
p->next=Node;
}
push_back(List1,temp);
补充:两个链表排序归并
NodeList* f(NodeList* list1,NodeList* list2) {
NodeList* mergedList;//表头,需要返回的结果
mergedList = InitList();
NodeList* p = mergedList;//后续需要新链表里作为插入的指针
NodeList* p1 = list1->next;
NodeList* p2 = list2->next;
while (p1 != NULL && p2 != NULL){
if (p1->data <= p2->data) {
p->next = p1;//push_back(p,p1->data);
p1 = p1->next;
} else {
p->next = p2;//push_back(p,p2->data);
p2 = p2->next;
}
p = p->next;
}
//剩余数据链接到p的末尾
if (p1 != NULL) {//p1剩余
p->next = p1;
}
if (p2 != NULL) {//p2剩余
p->next = p2;
}
return mergedList;//返回头指针
}
NodeList* mergedList = f(List1, List2);