写在前面:大家好,我是草莓橙须圆。毕业之前在CSDN和微信公众号活跃
欢迎关注我的公众号:【草莓橙须圆】
微信公众号主要就是更新大学生或者考研党的日常
CSDN主要就是学习过程中总结的笔记,以及编程分享
关于线性表,还是先看运行结果吧。
(1)按照输入的顺序建立顺序表:
线性表采用顺序存储的方式存储就称之为顺序表,顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。
线性表的动态分配顺序结构:
typedef struct{
//顺序表的存储结构定义
DataType data[ListSize];//顺序表占用的数组空间
int length;//记录顺序表长度
}Seqlist;
Seqlist CreateList(Seqlist L,int j) //结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数,不过可以return返回它
{
int n;
L.length=0;
while(L.length<j)
{
scanf("%d",&n);
L.data[L.length]=n;
L.length++;
}
return L;
}
然后,在main函数中调CreateList(mylist,j)函数
(2)对顺序表进行排序
这里选择使用快速排序
快速排序的思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
void QuickSort(Seqlist *L,int low,int high)//快速排序
{
int i=low,j=high; //low和high的位置待会递归的时候要用到
DataType pivotvalue=L->data[i]; //注意这里要用data[i]
if(low>=high) //一趟排序结束
return;
while(i<j)
{
while(i<j&&L->data[j]>=pivotvalue)
j--;
L->data[i]=L->data[j];
while(i<j&&L->data[i]<=pivotvalue)
i++;
L->data[j]=L->data[i];
}
L->data[i]=pivotvalue;
QuickSort(L,low,i-1);
QuickSort(L,i+1,high);
}
然后,在main函数中调用QuickSort(&mylist,0,mylist.length-1);函数,对之前创建的顺序表进行排序。
(3)按照从大到小顺序建议一个单链表
线性表采用指针链接的方式存储就称之为链表。
//单向链表声明
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
/* 链表创建 */
LinkList CreatLink(int num)
{
int data;
//p指向当前链表中最后一个结点,q指向准备插入的结点。
LinkList head = NULL, rearNode = NULL, newNode;
for (int i = 0; i < num; i