博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.2.2 线性表的顺序存储实现
阅读量:4315 次
发布时间:2019-06-06

本文共 3644 字,大约阅读时间需要 12 分钟。

#include
#include
# define MAXSIZE 1000# define ERROR -1typedef int position;typedef struct LNode * PtrToLNode;struct LNode{ int Data[MAXSIZE]; position Last;}; typedef PtrToLNode List;List MakeEmpty()//1.初始化 { List L; L=(List)malloc(sizeof(struct LNode)); L->Last=-1; return L;}position Find(List L,int X)//2.查找 { position i=0; while(i<=L->Last&&L->Data[i]!=X) i++; if(i>L->Last) return ERROR; else return i;}bool Insert(List L,int X,int i){
/*在L的制定位序i前插入一个新元素X;位序i元素的数组位置下标是i-1*/ position j; if(L->Last==MAXSIZE-1) {
/*表空间已满,不能插入*/ printf("表满,不能插入\n\n"); return false; } if(i<1||i>L->Last+2) {
/*检查插入位序的合法性:是否在1~n+1。n为当前元素个数,即Last+1*/ printf("位序不合法\n\n"); return false; } for(j=L->Last;j>i-1;j--)//List指向序列最后元素 L->Data[j+1]=L->Data[j];//将位序i及以后的元素顺序向后移动 L->Data[i-1]=X;//插入数据 L->Last++;//Last仍指向最后元素 return true; }bool Delete(List L,int i)//删除 { position j; if(i<1||i>L->Last+1) { printf("位序%d不存在\n\n",i); return false; } for(j=i;j<=L->Last;j++) L->Data[j-1]=L->Data[j]; L->Last--; return true; } void Length(List L)//求表长 { position j; position count=0; for(j=0;j
Last+1;j++) count++; printf("表的长度:%d\n\n",count);}void Print(List L)//打印 { position j; printf("数据元素:"); for(j=0;j
Last+1;j++) printf("%d ",L->Data[j]); printf("\n\n");}void Menu()//菜单 { int chose; int X,i; List L; printf("\t线性表的顺序存储实现\n"); printf("1.创建顺序表\t2.向顺序表插入数据\n3.查找数据\t4.删除数据\n5.求表长\t6.打印顺序表\n7.清屏\t\t8.退出\n"); printf("请输入您的操作:"); scanf("%d",&chose); switch(chose) { case 1: { L=MakeEmpty(); printf("顺序表创建完成\n\n"); break; } case 2: { printf("请输入您想要插入的数据以及位置: "); scanf("%d%d",&X,&i); Insert(L,X,i); printf("\n\n"); break; } case 3: { printf("请输入您要查找的数据:"); scanf("%d",&X); Find(L,X); printf("%d元素的位置为%d\n\n",X,Find(L,X)+1); break; } case 4: { printf("请输入您想要删除的下标:"); scanf("%d",&i); Delete(L,i); printf("操作完成\n\n"); break; } case 5: { Length(L); printf("\n\n"); break; } case 6: { Print(L); printf("\n\n"); break; } case 7: { system("cls"); break; } case 8: { exit(0); } default:printf("输入有误!\n\n"); } } int main(){ while(1) { Menu(); //printf("按Enter键继续...\n"); } return 0;}

 对部分代码的解释:

typedef int position;typedef struct LNode * PtrToLNode;struct LNode{    int Data[MAXSIZE];    position Last;}; typedef PtrToLNode List; 变量Last记录当前线性表中最后一个元素在数组中的位置,即Last起一个指针(实际是数组下标)的作用,始终指向线性表中最后一个元素。表空时Last=-1。
i 0 1 ... i-1 i ... n-1 ... MAXSIZE-1
Data a1 a2 ... ai ai+1 ... an ...  
                      线性表的顺序存储示意图 由于LNode是一个包含数组的结构,当我们实现各种针对顺序表的操作时,直接将该结构作为函数参数传递显然不是个好方法,使用结构指针传递效率更高,所以我们把List定义为结构指针。 这样,我们可以利用List定义线性表L:     List L; 通过L我们可以访问相应线性表的内容。比如下标为i的元素可以通过L-Data[i]访问,线性表的长度可以通过L->Last+1得到。

转载于:https://www.cnblogs.com/nyist0/p/9107733.html

你可能感兴趣的文章
Entity Framework 4.3.1 级联删除
查看>>
codevs 1163:访问艺术馆
查看>>
冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱
查看>>
并查集
查看>>
sessionStorage
查看>>
代码示例_进程
查看>>
Java中关键词之this,super的使用
查看>>
人工智能暑期课程实践项目——智能家居控制(一)
查看>>
前端数据可视化插件(二)图谱
查看>>
kafka web端管理工具 kafka-manager【转发】
查看>>
获取控制台窗口句柄GetConsoleWindow
查看>>
Linux下Qt+CUDA调试并运行
查看>>
51nod 1197 字符串的数量 V2(矩阵快速幂+数论?)
查看>>
OKMX6Q在ltib生成的rootfs基础上制作带QT库的根文件系统
查看>>
zabbix
查看>>
多线程基础
查看>>
完美解决 error C2220: warning treated as error - no ‘object’ file generated
查看>>
使用SQL*PLUS,构建完美excel或html输出
查看>>
前后台验证字符串长度
查看>>
《算法导论 - 思考题》7-1 Hoare划分的正确性
查看>>