数据结构实验一顺序表的实现Word文档下载推荐.docx
- 文档编号:14017822
- 上传时间:2022-10-16
- 格式:DOCX
- 页数:17
- 大小:51.16KB
数据结构实验一顺序表的实现Word文档下载推荐.docx
《数据结构实验一顺序表的实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构实验一顺序表的实现Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
#defineOVERFLOW-2
typedefintElemType;
typedefintStatus;
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
StatusInitList_Sq(SqList*L){
L->
elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!
elem)return(OVERFLOW);
length=0;
listsize=LIST_INIT_SIZE;
returnOK;
}
StatusCreatList_Sq(SqList*L,intn)
1
{
inti;
printf("
输入%d个整数:
\n"
n);
for(i=0;
i<
n;
i++)
scanf("
\n%d"
&
elem[i]);
//以下是整个源程序:
#include"
SqList.h"
intmain()
inti,n;
SqLista;
SqList*l=&
a;
if(InitList_Sq(l)==-2)printf("
分配失败"
);
\n输入要建立的线性表l的长度n:
"
//输入线性表得长度
%d"
n);
l->
length=n;
线性表的长度是:
%d\n"
l->
length);
CreatList_Sq(l,n);
//生成线性表
输出线性表l中的元素值:
//输出线性表中的元素
length;
%7d"
getchar();
程序的运行结果:
2
2.顺序表的插入
利用前面的实验先建立一个顺序表L,然后再第i个位置插入元素,通过对比插入元素
前后的线性表发生的变化,判断插入操作是否正确。
参考程序:
StatusListInsert_Sq(SqList*L,inti,ElemTypee)
//在线性表L中的第i个位置前插入一个值为e的元素
//i的取值范围:
1<
=i<
=ListLength_Sq(L)
ElemType*newbase,*q,*p;
if(i<
1||i>
length+1)returnERROR;
//i值不合法
if(L->
length>
=L->
listsize){//当前存储空间已满,增加分配量
newbase=(ElemType*)realloc(L->
elem,
(L->
listsize+LISTINCREMENT)*sizeof(ElemType));
newbase)return(OVERFLOW);
//存储分配失败
elem=newbase;
//新基址
length=+LISTINCREMENT;
//增加存储容量
}//if
q=&
elem[i-1]);
//q为插入位置
for(p=&
elem[L->
length-1]);
p>
=q;
--p)*(p+1)=*p;
//插入位置及以后的元素右移
*q=e;
//插入e
++L->
//表长增1
}//ListInsert_Sq
intn,i,x;
SqList*L,a;
L=&
InitList_Sq(L);
\n输入要建立的线性表L得长度:
CreatList_Sq(L,n);
\n插入元素之前线性表L的长度是:
L->
\n插入元素之前线性表L中的元素是:
%5d"
\n输入要插入元素的位置:
i);
\n输入要插入的元素的值:
3
\n%d"
x);
if(ListInsert_Sq(L,i,x)>
0)
\n插入元素之后线性表L的长度是:
%d"
\n插入元素之后线性表L的元素是:
L->
else
不能插入这个元素~\n"
运行结果:
4.单链表的实现
新建链表,生成一个有一定结点的链表,并且顺序输出。
程序代码:
stdio.h"
stdlib.h"
string.h"
#definenull0
#defineMAX100//最多元素个数
#defineLENGTHsizeof(structNode)
typedefintElem;
//数据元素类型
//单链表实现线性表
structNode
4
Elemdata;
//数据域
structNode*next;
//指针域
};
typedefstructNodeNODE;
typedefstructNode*LINKLIST;
//初始化链表,产生一个空链表
LINKLISTInitList()
//返回空链表的头指针
LINKLISThead;
head=null;
returnhead;
//新建链表,生成一个有一定结点的链表
LINKLISTCreateList()
//返回新链表的首地址(指针)
LINKLISThead=null,p,q;
intn,i;
Elemtemp;
do{
请输入要建的结点数:
if(n<
1||n>
MAX)
对不起~请输入的数在1-%d之间,请重新输入。
MAX);
}while(n<
MAX);
p=(LINKLIST)malloc(LENGTH);
//开辟新结点空间
请输入第%d结点数据:
i+1);
temp);
//输入结点数据
p->
data=temp;
if(head==null)//如果head指向空,则p结点为第一个结点
head=q=p;
next=null;
else//不是第一个结点,则结点放到结尾并且,尾指针
后移
5
q->
next=p;
q=p;
//返回新链表的首地址(指针)}
//遍历打印链表
intprintList(LINKLISTh)//返回打印结果,0表示无数据,1表示成功打印完成{
LINKLISTpt=h;
if(pt==null)//没有数据直接返回
对不起,没有数据~"
return0;
while(pt)//结点不为空就打印结点内容
%d"
pt->
data);
pt=pt->
next;
return1;
//求的链表的长度
intListLength(LINKLISTh)//求的链表长度,返回链表长度,若链表为空则返回0{
intlen=0;
//初始化计数器为0
while(pt)
len++;
returnlen;
//返回链表长度}
/*
//向链表链表尾部添加结点,无输入
6
LINKLISTAddNode(LINKLISTh,Eleme)
LINKLISThead,pt,p;
pt=head=h;
//指向起始结点
//开辟结点空间
data=e;
//向结点数据赋值
//结点后继指向空
if(pt==null)//若链表为空,直接作为第一个结点
head=p;
else//若不为空,将结点插在最后
while(pt->
next)
pt->
//返回头结点指针}
*/
//向链表链表尾部添加结点,有输入
LINKLISTAddNode(LINKLISTh){
请输入要添加的数据:
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 顺序 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)