线性表的基本操作课件Word文件下载.docx
- 文档编号:22280148
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:20.16KB
线性表的基本操作课件Word文件下载.docx
《线性表的基本操作课件Word文件下载.docx》由会员分享,可在线阅读,更多相关《线性表的基本操作课件Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
list[j-1]=list[j];
(*p_n)--;
voidmain()
{inti,x,temp;
printf("
pleaseinputthenumberforn\n"
);
n="
scanf("
%d"
&
n);
for(i=0;
i<
=n;
i++)
{printf("
list[%d]="
i);
scanf("
list[i]);
}
Thelistbeforeinsertionis\n"
i++)printf("
%d"
list[i]);
\n"
pleaseinputthepositionwhereyouwanttoinsertavalue\nposition="
i);
pleaseinputthevalueyouwanttoinsert.\nx="
x);
temp=sq_insert(list,&
n,i,x);
switch(temp)
{case0:
printf("
Theinsertionissuccessful!
printf("
Thelistisafterinsertionis\n"
for(i=0;
%d\n"
n);
break;
case1:
case2:
Theinsertionisnotsuccessful!
break;
/*deleting*/
Thelistbeforedeletingis\n"
pleaseinputthepositionwhereyouwanttodeleteavalue\nposition="
temp=sq_delete(list,&
n,i);
Thedeletingissuccessful!
Thelistisafterdeletingis\n"
Thedeletingisnotsuccessful!
"
2.分析并运行以下各子程序的主要功能。
程序2链式存储的线性表和运算
malloc.h>
structnode{
chardata;
structnode*next;
};
typedefstructnodeNODE;
/*Thisfunctioncreatesalink_listwithNnodes.*/
NODE*create_link_list(intn)
{inti;
NODE*head,*p,*q;
if(n==0)returnNULL;
head=(NODE*)malloc(sizeof(NODE));
p=head;
Pleaseinput%dcharsforthelinklist\n"
n;
{scanf("
%c"
&
(p->
data));
q=(NODE*)malloc(sizeof(NODE));
test3\n"
p->
next=q;
p=q;
getchar();
p->
next=NULL;
return(head);
/*Thisfunctioninsertsanodewhosevalueisb*/
/*beforethenodewhosevalueisa,ifthenodeisnotexist,*/
/*theninsertitattheendofthelist*/
voidinsert(NODE**p_head,chara,charb)
{NODE*p,*q;
q=(NODE*)malloc(sizeof(NODE));
q->
data=b;
next=NULL;
if(*p_head==NULL)*p_head=q;
else
{p=(NODE*)malloc(sizeof(NODE));
p=*p_head;
while(p->
data!
=a&
&
next!
=NULL)
p=p->
next;
q->
next=p->
next=q;
/*Thefunctiondeletesthenodewhosevalueisa,*/
/*ifsuccess,return0,orreturn1*/
intdeletenode(NODE**p_head,chara)
q=*p_head;
if(q==NULL)return
(1);
if(q->
data==a)
{*p_head=q->
free(q);
return(0);
{while(q->
{p=q;
q=q->
if(q->
{p->
next=q->
free(q);
return(0);
elsereturn
(1);
{NODE*my_head,*p;
/*createalinklistwithmnodes*/
intm;
charch_a,ch_b;
pleaseinputthenumberofnodesforthelink_list\nm="
m);
test1\n"
my_head=(NODE*)malloc(sizeof(NODE));
my_head=create_link_list(m);
/*Outputthelinklist*/
Thelinklistislike:
p=my_head;
while(p!
p->
data);
p=p->
}
/*insertanodewhosevalueisbbeforea*/
Pleaseinputthepositionfora\nch_a="
%c"
ch_a);
Pleaseinputthevaluethatyouwanttoinsert\nch_b="
ch_b);
insert(&
my_head,ch_a,ch_b);
Thelinklistafterinsertionislike:
/*deleteanodewhosevalueisa*/
Pleaseinputthepositionforaa="
deletenode(&
my_head,ch_a);
Thelinklistafterdeletingislike:
3.运行以下程序并分析各子函数的主要功能。
#include<
stdlib.h>
structtagNode
{
intdata;
structtagNode*pNext;
};
typedefstructtagNode*pNode;
//将结点插入到链表的适当位置,这是一个降序排列的链表
//
voidinsertList(pNodehead,//链表头结点
pNodepnode)//要插入的结点
pNodepPri=head;
while(pPri->
pNext!
=NULL)
{
if(pPri->
pNext->
data<
pnode->
data)
{
pnode->
pNext=pPri->
pNext;
pPri->
pNext=pnode;
break;
pPri=pPri->
if(pPri->
pNext==NULL)//如果要插入的结点最小
pPri->
//输出链表
voidprintLinkedList(pNodehead)
pNodetemp=head->
while(temp!
temp->
temp=temp->
//从链表中删除结点
voiddelformList(pNodehead,intdata)
if(temp->
data==data)
pNext=temp->
free(temp);
pPri=temp;
pNodehead=(pNode)malloc(sizeof(structtagNode));
//给头指针分配空间
pNodepTemp=NULL;
inttemp;
head->
pNext=NULL;
//比较好的习惯就是分配好空间,马上赋值
请输入要放入链表中的数据,以-1结尾:
//读入数据,以-1结尾,把数据插入链表中
temp);
=-1)
pTemp=(pNode)malloc(sizeof(structtagNode));
pTemp->
data=temp;
insertList(head,pTemp);
降序排列的链表为:
printLinkedList(head);
//下面的代码当删除函数编写成功后,可以取消注释,让其执行,主要是调用函数实现链表结点的删除
//printf("
请输入要删除数,以-1结尾:
//scanf("
//while(temp!
//{
//delformList(head,temp);
//scanf("
//}
删除节点后,链表中剩余数据为:
//printLinkedList(head);
四、思考与提高
试将以上链表改为有序表,并分析有序表有哪些显著的优点和缺点?
库函数载和常量定义:
(代码,C++)
iostream>
usingnamespacestd;
constintMaxSize=100;
(1)顺序表存储结构的定义(类的声明):
(代码)
template<
classdatatype>
//定义模板类SeqList
classSeqList
public:
SeqList();
//无参构造函数
SeqList(datatypea[],intn);
//有参构造函数
~SeqList(){};
//析构函数为空
intLength();
//求线性表的长度
datatypeGet(inti);
//按位查找,取线性表的第i个元素
intLocate(datatypeitem);
//查找元素item
voidInsert(inti,datatypeitem);
//在第i个位置插入元素item
datatypeDelete(inti);
//删除线性表的第i个元素
voiddisplay();
//遍历线性表,按序号依次输出各元素
private:
datatypedata[MaxSize];
//存放数据元素的数组
intlength;
//线性表的长度
(2)初始化顺序表算法实现(不带参数的构造函数)
/*
*输入:
无
*前置条件:
顺序表不存在
*功能:
构建一个顺序表
*输出:
*后置条件:
表长为0
*/
实现代码:
SeqList<
datatype>
:
SeqList()
length=0;
(3)顺序表的建立算法(带参数的构造函数)
顺序表信息的数组形式a[],顺序表长度n
将数组a[]中元素建为长度为n的顺序表
SeqList(datatypea[],intn)
if(n>
MaxSize)
cout<
<
数组元素个数不合法"
endl;
for(inti=0;
i++)
data[i]=a[i];
length=n;
}(4)在顺序表的第i个位置前插入元素e算法
插入元素e,插入位置i
顺序表存在,i要合法
将元素e插入到顺序表中位置i处
顺序表插入新元素,表长加1
voidSeqList<
Insert(inti,datatypeitem)
{
intj;
if(length>
=MaxSize)
溢出"
1||i>
length+1)
i不合法!
for(j=length;
=i;
data[j]=data[j-1];
data[i-1]=item;
length++;
}(5)删除线性表中第i个元素算法
要删除元素位置i
顺序表存在,i要合法
删除顺序表中位置为i的元素
顺序表册除了一个元素,表长减1
datatypeSeqList<
Delete(inti)
intitem,j;
if(length==0)
表为空,无法删除元素!
length)
i不合法!
item=data[i-1];
//获得要删除的元素值
for(j=i;
length;
data[j-1]=data[j];
//注意数组下标从0记
length--;
returnitem;
}(6)遍历线性表元素算法
顺序表存在
顺序表遍历
输出所有元素
template<
display()
if(length==0)
表为空,无法输出!
for(inti=0;
i<
i++)
data[i]<
"
;
(7)获得线性表长度算法
输出顺序表长度
顺序表长度
intSeqList<
Length()
returnLength;
(8)在顺序线性表中查找e值,返回该元素的位序算法
查询元素值e
按值查找值的元素并输出位置
查询元素的位置
Locate(datatypeitem)
if(data[i]==item)
returni+1;
//下标为i的元素等于item,返回其序号i+1
return0;
//查找失败
(9)获得顺序线性表第i个元素的值
查询元素位置i
按位查找位置为i的元素并输出值
查询元素的值
Get(inti)
0||i>
length)
elsereturndata[i-1];
(10)判表空算法
判表是否为空
为空返回1,不为空返回0
无
boolSeqList<
Empty()
if(length==0)
return1;
}
return0;
(11)求直接前驱结点算法
要查找的元素e,待存放前驱结点值e1
查找该元素的所在位置,获得其前驱所在位置。
返回其前驱结点的位序。
e1值为前驱结点的值
Pre(datatypeitem)
intk=Locate(item)-1;
if(k>
0)
returnk;
无前驱结点!
(12)求直接后继结点算法
要查找的元素e,待存放后继结点值e1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 基本 操作 课件