
数据结构基本之线性表
发布日期:2021-05-07 15:59:01
浏览次数:16
分类:原创文章
本文共 2675 字,大约阅读时间需要 8 分钟。
2.2顺序表插入//顺序表存储结构#define MAXSIZE 100typedef struct{ Type elem[MAXSIZE]; int last ;}List;#define OK 1#define ERROR 0 //在顺序表L中第i个数据元素之前插入一个元素e。//i的合法取值范围1<=i<=last+2int InsList(List *L,int i,Type e){ int k; //判断插入位置是否合法 //边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last) if(i<1||i>last+1){ printf("插入位置i不合法"); return ERROR; } //判断是否能够插入 //最后一个元素已经是 MAXSIAZE-1 if(L->last>=MAXSIAZE-1){ printf("表已满,无法插入"); return ERROR; } //为插入元素移动位置 i-1把i-1的元素移走 for(k=L->last;k>=i-1;k--){ L->elem[k+1]=L->elem[k]; } L->elem[i-1]=e;//第i个数据元素之前插入一个元素e L->last++;//修改尾指针 return OK:}2.3顺序表删除#define OK 1#define ERROR 0 //在顺序表L中删除第i个数据元素,并用指针参数e返回其值。//i的合法取值范围1<=i<=last+1 int InsList(List *L,int i,Type e){ int k; //判断删除位置是否合法 //边界点 1 (1之前为位置0) last+1 (last+1 之前为位置last) if(i<1||i>last+1){ printf("删除位置i不合法"); return ERROR; } *e =L->elem[i-1];//将删除元素放入指针e带出 //为插入元素移动位置 i-1把i-1的元素移走 for(k=i;i<=L->last;k--){ L->elem[k-1]=L->elem[k]; }//last最后一个元素的下标 L->last--;//修改尾指针 return OK:}//单链表的存储结构//Node结点类型定义 typedef struct Node{ Type data; struct Node* next; }Node,*List; //*List结构指针类型 //初始化单链表InitList(List *L){ *L=(List)malloc(sizeof(Node));//建立头节点List头指针类型 (*L)->next=NULL; }//头插法建立单链表 void CreatFromHead(List L){ char c; Node *s; int flag=1; while(flag){ c=getchar();//获得字符串 if(c!=$){ s=(Node*)malloc (sizeof(Node));//申请新结点 s->data=c; s->next=L->next; L->next=s; } else flag=0; }}//尾插法建立单链表 void CreatFromTail(List L){ Node *s,*r;r=L;//初始化 char c; int flag=1; while(flag){ c=getchar(); if(c!=$){ s=(Node*)malloc(siazeof(Node)); s->data=c; r->next=s;//尾插 r=s;//修改尾指针 } else { flag=0; r->next=NULL; } }}//单链表的删除int Insert(List L,int i,Type e){ Node *pre,*s; pre=L; int k=0; if(i<0){ printf("输入位置不合法"); return EROOR; } while(pre!=NULL&&k<i-1){ pre=pre->next; k=k+1; } if(Pre==NULL){ printf("输入位置不合法"); return EROOR; } s->data=e; s->next=pre->next; pre->next=s; return OK:}//单链表删除int DelList(List L,int i,Type *e){ Node *pre,*s;//s指向待删元素的指针 pre=L; int k=0; while(Pre->next!=NULL&&k<i-1){ pre=pre->next; k=k+1; } if(Pre->next==NULL||i<1){ printf("删除位置不合法"); return ERROR; } s=pre->next; pre->next=s->next; *e=s->data; free(s); return OK:}//线性表的链式存储typedef int ElemType;//单链表存储结构的描述typedef struct Node//结点类型定义 { ElemType data; struct Node* next; } Node,*LinkList;//初始化单链表 InitList(LinkList *L){ /* L是单链表的头指针,它指向表中第一个结点,(对于带头结点的单链表,则指向单链表的头结点) L=NULL,单链表为空,长度为0 (对于带头结点的单链表,L->next=NUll) 有头结点 L是指向单链表的头结点的指针(指针是地址),用来接受头指针变量的地址 *L头指针变量(存储值为地址的变量),在主程序中用来初始化单链表 */ *L=(LinkList)malloc(sizeof(Node));//建立头结点 (*L)->next=NUll;//建立空的单链表L }
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月06日 04时43分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Python根据程序名称结束进程
2019-03-04
C# 适配器模式
2019-03-04
二分查找与插入排序的结合使用
2019-03-04
71 简化路径(模拟、栈)
2019-03-04
892 三维形体的表面积(分析)
2019-03-04
40. 组合总和 II(dfs、set去重)
2019-03-04
16 最接近的三数之和(排序、双指针)
2019-03-04
1333 餐厅过滤器(treemap映射)
2019-03-04
python中的all函数
2019-03-04
1137 第 N 个泰波那契数(迭代、记忆性递归)
2019-03-04
279 完全平方数(dfs)
2019-03-04
279 完全平方数(bfs)
2019-03-04
865 具有所有最深结点的最小子树(递归)
2019-03-04
738 单调递增的数字(找出逆序的位置)
2019-03-04
410 分割数组的最大值(二分查找、动态规划)
2019-03-04
875 爱吃香蕉的珂珂(二分查找)
2019-03-04
693 交替位二进制数(位运算)
2019-03-04
450 删除二叉搜索树中的节点(递归删除节点)
2019-03-04
769 最多能完成排序的块(分析)
2019-03-04
542 01 矩阵(单源bfs、多源bfs)
2019-03-04