数据结构线性表采用顺序存储的顺序顺序存储中关于删除操作的问题

线性表的顺序存储及解决约瑟夫问题_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
线性表的顺序存储及解决约瑟夫问题
&&数据结构实验报告
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩4页未读,
定制HR最喜欢的简历
你可能喜欢《第2章 线性表及其应用》习题解答_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《第2章 线性表及其应用》习题解答
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩39页未读,
定制HR最喜欢的简历
你可能喜欢数据结构线性表删除操作的一个问题_百度知道
数据结构线性表删除操作的一个问题
请大家看下,其中表示表尾元素的位置那条语句我不是很懂,我觉得应该是q=&(L.elem[L.length - 1]);
好心人耐心的解释下··
我有更好的答案
我认为,表尾元素的位置应该是L.length-1-L.elem.我们来分析:表长度为L.length,又表结构下标从0开始,所以在删除元素elem之前,表尾元素的位置应该为L.length-1。因此,在删除元素elem之后,表尾元素的位置就一应该是L.length-1-L.elem。
采纳率:34%
书上对着呢表结尾专门开一个节点表示结尾,这样方便操作。而真正存数据的节点只用到结尾的前一个
为您推荐:
其他类似问题
线性表的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。线性表采用顺序存储便于进行插入和删除操作对不对_百度知道
线性表采用顺序存储便于进行插入和删除操作对不对
我有更好的答案
不对,弄反了,顺序存储是不便于插入和删除,便于插入删除的是链式存储
采纳率:75%
为您推荐:
其他类似问题
线性表的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。数据结构c语言版 使用线性表的顺序储存结构定义(静态)实现线性表的初_百度知道
数据结构c语言版 使用线性表的顺序储存结构定义(静态)实现线性表的初
数据结构c语言版 使用线性表的顺序储存结构定义(静态)实现线性表的初始化、插入、删除和显示功能
我有更好的答案
#include&stdio.h&#include&malloc.h&#define MAXSIZE 100#define TRUE & &1#define FALSE & 0#define OK & & &1#define ERROR & 0#define OVERFLOW -2#define NULL & &0typedef struct LNode{int & &struct LNode *}*Link,*Ptypedef struct{Link head,int & &}LinkLint MakeNode(Link &p,int e){ & & &&//分配由p指向的值为e的结点,并返回OK; 若分配失败,则返回ERRORif(!(p=(Link)malloc(sizeof( Link ))))return ERROR;p-&data=e;p-&next=NULL;return OK;}void FreeNode(Link &p){//释放p所指的结点free(p);p=NULL;}int InitList(LinkList &L){//构造一个空的线性链表LLp=(Link)malloc(sizeof(LNode));if(!p)return(OVERFLOW);p-&next=NULL;L.tail=L.head=p;L.len=0;return OK;}int ClearList(LinkList &L)
采纳率:50%
直接上源码吧。/*线性表功能的实现*/#include&stdio.h&//定义常量 存储空间的初始化分配#define MAXSIZE 20#define TRUE 1#define ERROR -1#define FALSE 0#define OK 1//用typedef定义类型typedef int Stypedef int ElemT//定义一个结构体类型typedef struct{
ElemType data[MAXSIZE];} SqL //初始化函数Status initList(SqList *L){
L-&length = 0;
return OK; } //返回线性表的长度Status getListLength(SqList L){
return L.}//线性表为空返回true,否则返回falseStatus listEmpty(SqList L){
if(L.length == 0){
return TRUE;
return FALSE;} //线性表清空,长度为0 Status clearList(SqList *L){
L-&length = 0;
return OK;} //获取指定的元素的值,返回下标为i - 1的元素,赋值给eStatus getElem(SqList L, int i, ElemType *e){
//判断元素位置是否合法[i]
if(i & L.length || i & 1){
printf(&查找的位置不正确 \n&);
return ERROR;
//判断线性表是否为空
if(listEmpty(L)){
return ERROR;
*e = L.data[i - 1];
return OK;}//在线性表中查找指定的e相等的元素,如果查找成功,返回该元素的下标,否则返回ERRORStatus locateElem(SqList L, ElemType e){
for(i = 0; i & L.length - 1; i++){
if(L.data[i] == e){
printf(&没有查找到元素 %d 指定的下标\n&,e);
return ERROR;} //自动创建 MAXSIZE 个元素,并赋值为0 Status createList(SqList *L){
for(i = 0; i & 10; i++){
L-&data[i] = 0;
L-&length = 10;
return OK;} //在线性表中第i个位置前插入新元素e Status listInsert(SqList *L, int i, ElemType e){
//判断长度是否可以允许插入新的数据
if(L-&length &= MAXSIZE){
printf(&空间已满,不能再插入数据\n&);
return FALSE;
//判断插入位置的合法性
if(i & 1 || i & L-&length) {
printf(&插入位置不正确\n&);
return FALSE;
for(j = L-&length - 1; j &= j--){
L-&data[j] = L-&data[j - 1];
L-&data[i - 1] =
L-&length++;
return TRUE;}//删除线性表中第i个元素,成功后表长减1,用e返回其值 Status deleteList(SqList *L, int i, ElemType *e){
//判断线性表是否为空
if(listEmpty(*L)){
return ERROR;
//判断删除的位置是否合法
if(i & 1 || i & L-&length) {
printf(&删除位置不合法\n&);
return ERROR;
*e = L-&data[i - 1];
for(i; i & L-& i++){
L-&data[i - 1] = L-&data[i];
L-&length--;
return TRUE;} //遍历线性表Status listTraverse(SqList L){
for(i = 0; i & L. i++){
printf(&%d &,L.data[i]);
printf(&\n&);
return OK;} //主程序int main(void){
initList(&L);
int option = 1;
int input_
ElemType input_
printf(&\n1.遍历线性表 \n2.创建线性表 \n3.清空线性表 \n4.线性表插入 \n5.查找表中元素 \n6.判断元素是否在表中 \n7.删除某个元素 \n8.线性表长度\n9.线性表是否为空\n0.退出 \n请选择你的操作:\n&);
while(option){
scanf(&%d&,&option);
switch(option){
return OK;
listTraverse(L);
createList(&L);
listTraverse(L);
clearList(&L);
listTraverse(L);
printf(&请输入插入的位置:&);
scanf(&%d&,&input_number);
printf(&\n&);
printf(&请输入插入的值:&);
scanf(&%d&,&input_value);
printf(&\n&);
listInsert(&L, input_number, input_value);
listTraverse(L);
printf(&请输入要查找的位置:&);
scanf(&%d&,&input_number);
printf(&\n&);
getElem(L, input_number, &input_value);
printf(&第%d个元素的值为:%d\n&,input_number,input_value);
printf(&请输入要查找的元素:&);
scanf(&%d&,&input_value);
printf(&\n&);
res = locateElem(L, input_value);
if(res != ERROR){
printf(&值为%d在表中的第%d个位置\n&,input_value,input_number);
printf(&要删除第几个元素?&);
scanf(&%d&,&input_number);
printf(&\n&);
deleteList(&L, input_number, &input_value);
listTraverse(L);
res = getListLength(L);
printf(&线性表的长度是:%d&,res);
res = listEmpty(L);
printf(&线性表的是空的&);
printf(&线性表的是不是空的&);
return OK;}
线性表的特征是:1. 元素之间是有序的,如果元素存在多个,则第一个元素无前驱,最后一个无后继,其它元素都有且只有一个前驱和后继.2. 元素个数是有限的. 当n=0是,称为空表线性表实现方式有两种,分别是顺序存储结构和链式存储结构,它们之间各有优缺点 . 根据需求的不同进行选择不同的存储结构.线性表存储结构的优缺点优点:1. 无须为表中元素之前的逻辑关系而增加额外的存储空间2. 可以快速的存取表中的任一位置的元素缺点:1. 插入和删除操作需要移动大量元素2. 当线性表长度变化较大时,难以确定存储空间的容量.3. 造成存储空间的”碎片”.
本回答被网友采纳
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 对于顺序存储的线性表 的文章

 

随机推荐