顺序表和单链表

顺序表和单链表

顺序表基本运算

思想要体会并理解和使用

  1. 顺序表中,用数组存放,数据元素
  2. 明确数据元素的序号和数组的下标的关系
    • 序号 = 下标 + 1
  3. 要习惯,并运用 数据元素 这个说法

初始化线性表

把 L 置为空表

L->length = 0;

往线性表L中添加元素

**1. **判满

**2. **添加元素

**3. **填充数据元素

**4. **长度+1

**5. **是否继续添加

**1. **判满

if (L->length == MaxLen)
{
    printf("顺序表已满!\n");
    return;
}

**2. **添加元素

printf("请输入数据元素的值:");
scanf("%d", &x);

**3. **填充数据元素

L->data[L->length] = x;

**4. **顺序表长度+1

L->length++;

**5. **是否继续添加

printf("是否继续添加?(Y/N)");
scanf("%c", &ch);

在顺序表中,数据元素的序号和数组的下标的关系

序号 = 下标 + 1

最后一个元素,就是第 length 个元素,它的下标是 length-1

接着往后添加,这个数据元素的下标就是 L->length

输出线性表L中的元素

for (i = 0; i < L.length; i++)
    printf("(%d)%d", i + 1, L.data[i]);

求线性表L的长度

return L.length;

按序号取元素

**1. **判断查找位置是否合法

**2. **返回数据元素

按值查找

插入新元素

**1. **判满

**2. **判断查找位置是否合法

**3. **后移

**4. **填充数据元素

**5. **长度+1

在线性表中删除元素Delete(&L, i)

**1. **判断删除位置是否合法

**2. **前移

**3. **长度-1

顺序表综合练习

单链表基本运算

初始化线性表

**1. **为头结点申请空间,并判断申请空间是否成功

**2. **将头指针置空

往线性表L中添加元素

头插法

添加的元素,放在头结点之后

**1. **申请空间,并判断申请空间是否成功

**2. **添加元素

**3. **填充数据域,指针域

**4. **连接其前驱结点

**1. **申请空间,并判断申请空间是否成功

// 申请空间LinkList s = (LinkList)malloc(sizeof(ListNode));// 判断空间是否申请成功if (s == NULL){    printf("空间申请失败!\n");    exit(-1);}

**2. **添加元素

DataType x;printf("请输入要添加的数据元素的值:");scanf("%d",&x);

**3. **填充数据域,指针域

s->data = x;s->next = L->next;

**4. **连接其前驱结点

把头结点的前驱结点和新添加的结点连接

​ 头插法,连接在头结点之后

尾插法

**1. **找到尾结点

**2. **添加元素

**3. **申请空间,并判断申请空间是否成功

**4. **填充数据域、指针域

**5. **连接其前驱结点

**6. **r指向新的尾结点

添加的元素放在尾结点之后

注意事项

有的程序里,初始化和头插法或尾插法,放在一个函数里

对于初始化和尾插法,放在一起的情况下,头结点,就是尾结点

就不需要下面这些代码了

while (r->next){    r = r->next;}

输出线性表L的元素

**1. **定义第1个元素

**2. **while循环逐个输出

求线性表L的长度

**1. **定义第一个元素

**2. **while循环计数

按序号取元素

**1. **判断查找位置是否合法

**2. **定义第1个元素

**3. **while循环

按值查找

插入新元素

**1. **判断插入位置是否合法

**2. **找到 q 结点

**3. **申请空间,并判断申请空间是否成功

**4. **填充数据域,填充指针域

**5. **连接其前驱结点

在线性表中删除元素

**1. **判断删除位置是否合法

**2. **找到 q 结点(第 i-1 个元素)

**3. **修改指针域

链表画图,理解

有个想法,dev-c++中的样式可不可以有深色的颜色背景,怎么设置

单链表综合练习

学生信息管理系统

增、删、改、查、显

添加元素AddList()

这里使用了尾插法

void AddList(LinkList L);

**1. **申请空间,判断申请空间是否成功

**2. **添加元素

**3. **填充数据域,指针域

**4. **连接其前驱结点

**5. **是否继续添加

删除元素DeleteList()

void DeleteList(LinkList L, LinkList p);

插入元素InsertList()

void InsertList(LinkList L, int i, DataType x);

**1. **判断插入位置是否合法

**2. **找到插入位置,第 i - 1 个位置

**3. **申请空间,判断申请空间是否成功

**4. **填充数据域,指针域

**5. **连接其前驱结点

查询

按学号查找SearchNum()

LinkList SearchNum(LinkList L, char* s);

按成绩范围查找SearchScore()

int SearchScore(LinkList L, int low, int high);

显示PrintList()

void PrintList(LinkList L);

排序

按学号升序排(冒泡法)SortNum()

void SortNum(LinkList L);

按成绩升序排SortScore

void SortScore(LinkList L);

计数Count()

void Count(LinkList L);

退出系统Quit()

辅助

辅助1.1–输入数据InputData()

void InputData(LinkList L, DataType* x);

辅助1.2–输出数据OutputData()

void OutputData(DataType x);

辅助2–获取链表长度GetLength()

int GetLength(LinkList L);

其他

初始化单链表InitList()

**1. **申请空间,判断申请空间是否成功

选单显示menu()

void menu(){	printf("****************************************************\n");	printf("                    学生信息管理系统                 \n");	printf("******************************************************\n");	printf("                  1.添加        2.查询              \n\n");	printf("                  3.显示        4.插入              \n\n");	printf("                  5.删除        6.排序              \n\n");	printf("                  7.统计        0.退出系统              \n\n");	printf("-------------------------------------------------------------");}

posted on 2021-06-22 07:26  beyondx  阅读(76)  评论(0编辑  收藏  举报

导航