今天借了同学的一本严蔚敏老师编写的《数据结构》,这也是广为人知的经典教材。对于初学者容易上手。
上午一直在看机器视觉相关的文献,所以就利用下午和晚上的时间把线性表中的 顺序表看了一遍,把相关程序跑了一下,这几天再把与链表相关的掌握一下,刚开始还是很简单的,后面的红黑树,图章节可能要费点时间了,毕竟学过好久了,很多概念,算法已经模糊了。希望这个暑假能坚持下来吧,希望能一直更新下去,有所收获。
源码:https://download.csdn.net/download/tianyuhang8800/11247543
下面是有关顺序表的代码:
#include "stdio.h"
#include "windows.h"
#include "string.h"
typedef int ElemType;
typedef int Status;//0-成功 1-失败
#define MAXSIZE 100
typedef struct
{
ElemType *elem; //储存空间的基地址
int length; //当前个数
}SqList;//定义类型为SqList
//初始化
Status InitList(SqList &L)
{
L.elem = new ElemType[MAXSIZE];//ElemType
if (!L.elem)
exit(0);
L.length = 0;
return 1;
}
//创建线性表
void CreateList(SqList &L)
{
printf("输入线性表元素的个数\r\n");
scanf_s("%d",&L.length);
printf("请输入线性表\r\n");
for (int j = 0; j < L.length; j++)
{
scanf_s("%d", &L.elem[j]);
}
}
//按照位置查找元素
void LocateElem_Data(SqList L)
{
int i;
printf("请输入要查找元素的位置\r\n");
scanf_s("%d", &i);
printf("该位置的元素为:%d\r\n", L.elem[i-1]);
}
//按照元素查找位置
void LocateElem_Addr(SqList L)
{
int e,i=0;
printf("请输入元素:\r\n");
scanf_s("%d", &e);
for (i = 0; i < L.length; i++)
{
if (L.elem[i] == e)
{
printf("该元素位于第:%d号\r\n", i + 1);
break;
}
}
if (i == L.length)
{
printf("无此元素\r\n");
}
}
//插入
void ListInsert(SqList &L)//在第i个位置 插入e
{
int i = 0,e = 0;
while (1)
{
printf("请输入要插入的位置\r\n");
scanf_s("%d", &i);
if (i<1 || i>L.length+1)// +1 修复了无法在结尾处插入元素的Bug
printf("输入有误,请重新输入\r\n");
else
{
printf("请输入要插入值:\r\n");
scanf_s("%d", &e);
break;
}
}
for (int j = L.length ; j >= i; j--)
{
L.elem[j ] = L.elem[j-1];
}
L.elem[i- 1] = e;
L.length = L.length++;
printf("插入成功\r\n");
}
// 删除元素
void ListDelete(SqList &L)//在第i个位置 删除元素
{
int i = 0;
while (1)
{
printf("请输入要删除的位置\r\n");
scanf_s("%d",&i);
if (i<1 || i>L.length)
{
printf("输入错误,请重新输入\r\n");
}
else
{
for (int j = i; j < L.length; j++)
{
L.elem[j - 1] = L.elem[j];
}
L.length = L.length--;
break;
}
}
printf("删除成功\r\n");
}
//查看线性表
void Print(SqList & L)
{
printf("线性表如下:\r\n");
for (int j = 0; j <L.length;j++)
{
//printf("L=%d", L.length);
//while (1);
printf("%d\t", L.elem[j]);
}
printf("\r\n");
}
void InitMenu()
{
printf("------菜单------\r\n");
printf("1.创建线性表\r\n");
printf("2.查看线性表\r\n");
printf("3.插入节点\r\n");
printf("4.删除节点\r\n");
printf("5.按位置查找元素\r\n");
printf("6.按元素查找位置\r\n");
printf("0.退出\r\n");
}
int main()
{
int i = 0;
SqList L;
InitList(L);
InitMenu();
while (scanf_s("%d", &i))
{
switch (i)
{
case 1:CreateList(L); InitMenu(); break;//创建线性表
case 2:Print(L); InitMenu(); break;//打印
case 3:ListInsert(L); InitMenu(); break;//插入节点
case 4:ListDelete(L); InitMenu(); break; //删除节点
case 5:LocateElem_Data(L); InitMenu(); break;//按位置查找元素
case 6:LocateElem_Addr(L); InitMenu(); break;//按元素查找位置
default: return 0; break;// 关闭窗口
}
}
创建线性表并显示
}
插入节点
删除节点
查找元素
查找位置