数据结构文档格式.docx
- 文档编号:17850937
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:23
- 大小:18.74KB
数据结构文档格式.docx
《数据结构文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
printf("
位置:
%d,结点值:
%c,"
i,sqbt.bt[i]);
intexistnode(sqBiTree&
sqbt,inti)
{//判断是否存在编号为i的结点
if(sqbt.bt[i]=='
不存在!
return0;
else
存在!
return1;
/*
charparent(inti)
{//求编号为i的结点parent
charleftchild(inti)
{//编号为i的结点leftchild
charrightchild(inti)
{//编号为i的结点rightchild
*/
voidmain()
createSqBiTree(sqbta,5);
outputsqbitree(sqbta);
existnode(sqbta,4);
2、带头结点的单向链表
stdlib.h"
typedefstructLnode
intdata;
structLnode*next;
}Lnode,*Linklist;
intInit_lnklst(Linklist&
L)
{//初始化
L=(Lnode*)malloc(1*sizeof(Lnode));
if(L!
=NULL)
初始化成功!
L->
next=NULL;
初始化失败!
}
intLnkinsertrear(Linklist&
L,inte)
{//在当前链表的末尾插入新元素为e的结点
Linklists,p;
p=L;
while(p->
next!
p=p->
next;
s=(Lnode*)malloc(1*sizeof(Lnode));
if(s!
s->
data=e;
next=NULL;
p->
next=s;
插入成功!
voidLnkinserthead(Linklist&
{//插入的结点作为链表的第一个结点
Linklistp,s;
s->
next=p->
p->
voidoutputlnklst(Linklist&
{//输出链表L中结点的数据元素值
Linklistp;
链表中的数据元素值如下:
%d,"
p->
data);
intlnklength(Linklist&
{//求链表长度
intlen=0;
next!
len++;
returnlen;
intlnkinsert(Linklist&
L,inti,inte)
{//在第i个结点之前插入元素值为e的结点
intj=0;
if(i<
1||i>
lnklength(L))
插入位置不合法!
p=L;
while(j<
i-1)
{
p=p->
j++;
}
s=(Lnode*)malloc(1*sizeof(Lnode));
intLnkdelete(Linklist&
L,inti,int&
e)
{//删除链表中的第i个数据元素,被删除的元素暂时存储于e中
Linklistp,q;
删除位置不合法!
q=p->
e=q->
data;
next=q->
free(q);
删除成功!
LinklistLa;
intlen;
intx;
Init_lnklst(La);
/*
for(i=1;
=10;
{//调用尾插法建立单链表
Lnkinsertrear(La,i*10);
*/
for(i=10;
i>
=1;
i--)
{//调用头插法建立单链表
Lnkinserthead(La,i*10);
outputlnklst(La);
len=lnklength(La);
len=%d\n"
len);
lnkinsert(La,3,25);
Lnkdelete(La,4,x);
被删除的元素为:
%d\n"
x);
3、二叉链表的链式存储
#include"
windows.h"
typedefstructBTNode
{//二叉链表数据类型构造
chardata;
structBTNode*Lchild,*Rchild;
}BTNode,*BTree;
/*BTreeisaddressofroot*/
BTreePre_Create_BT(BTreeBT)
{//返回指针的函数--先序方式创建二叉链表
ch=getchar();
if(ch=='
)returnNULL;
/*makeanemptytree!
BT=(BTNode*)malloc(sizeof(BTNode));
/*getaspaceofnode*/
BT->
data=ch;
Lchild=Pre_Create_BT(BT);
/*makelefttree*/
Rchild=Pre_Create_BT(BT);
/*makerighttree*/
returnBT;
voidVisit(BTreeBT)
{//访问结点的数据元素值
if(BT)printf("
%c"
BT->
data);
voidPreOrder(BTreeBT)
{//先序遍历二叉树
if(BT)
Visit(BT);
PreOrder(BT->
Lchild);
Rchild);
voidInOrder(BTreeBT)
{//中序遍历二叉树
InOrder(BT->
voidPostOrder(BTreeBT)
{//后续遍历二叉树
PostOrder(BT->
BTreepbt;
system("
cls"
//清屏
inputtreenodeelem(elem-->
left-->
right):
pbt=Pre_Create_BT(pbt);
preorderbitree,outputelemis:
PreOrder(pbt);
\ninorderbitree,outputelemis:
InOrder(pbt);
\npostorderbitree,outputelemis:
PostOrder(pbt);
\npbtnodedata:
%c\n"
pbt->
getchar();
4、顺序表的操作
//线性表的顺序存储结构,简称顺序表
//顺序表数据类型构造如下:
#defineLIST_INIT_SIZE100//线性表的初始空间大小
#defineLISTINCREMENT10//增量
typedefstruct
int*elem;
//设线性表中数据元素类型为整型,指针变量elem就是基地址(一段连续存储空间首地址)
intlength;
//顺序表的长度
intlistsize;
//当前存储空间的大小
}SqList;
//操作1--顺序表的初始化
//功能:
向系统申请一段连续的存储空间,类型是elemtype型,用elem存储基地址
//顺序表的长度设置为0,初始大小设置为LIST_INIT_SIZE
//形参类别:
1、普通变量作形参2、指针变量作形参3、引用作形参
intinitSqList(SqList&
L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(L.elem!
L.length=0;
L.listsize=100;
顺序表的初始化成功!
顺序表的初始化不成功!
//操作2:
创建具有n个元素的顺序表
intcreatesqlist(SqList&
L,intn)
{//创建具有n个元素的顺序表
//将n个元素依次存入存储空间中
if(n>
L.listsize)
无法创建顺序表,指定的n太大!
input%dnum:
n);
for(i=0;
n;
scanf("
L.elem[i]);
L.length=n;
//操作3:
输出顺序表中的数据元素
voidoutputsqlst(SqList&
顺序表中的数据元素如下:
L.length;
%d"
L.elem[i]);
//操作算法4:
删除顺序表中的第i个元素
intdeletesqlst(SqList&
L.length)
e=L.elem[i-1];
for(j=i;
j<
j++)
L.elem[j-1]=L.elem[j];
L.length--;
第i个元素之前插入新元素e
intsqlstinsert(SqList&
int*newbase;
if(L.length==L.listsize)
newbase=(int*)realloc(L.elem,(L.listsize+10)*sizeof(int));
if(newbase==NULL)
{
printf("
顺序表满了,而动态增加存储空间失败,不能插入新元素!
return0;
}
else
L.elem=newbase;
L.listsize+=10;
for(j=L.length-1;
j>
=i;
j--)
{
L.elem[j+1]=L.elem[j];
}
L.elem[i-1]=e;
L.length++;
return1;
else
for(j=L.length-1;
L.elem[j]=L.elem[j-1];
L.elem[i-1]=e;
L.length++;
return1;
SqListLa;
inte;
initSqList(La);
createsqlist(La,5);
outputsqlst(La);
deletesqlst(La,3,e);
sqlstinsert(La,1,5);
5、顺序栈操作
//顺序栈数据类型构造
{//设栈中数据元素类型为整型
int*base;
//栈底指针
int*top;
//栈顶指针
intstacksize;
//栈当前存储空间大小
}sqstack;
//操作1:
栈的初始化
intinitsqstack(sqstack&
s)
{//功能:
向系统申请一段连续的存储空间,当做栈使用
s.base=(int*)malloc(100*sizeof(int));
if(s.base!
栈初始化成功!
s.top=s.base;
s.stacksize=100;
栈初始化失败!
数据元素压入堆栈
intpush(sqstack&
s,inte)
if(s.top-s.base==s.stacksize)
s.base=(int*)realloc(s.base,(100+10)*sizeof(int));
if(s.base==NULL)
再次追加存储空间失败!
return0;
再次追加存储空间成功!
s.top=s.base+s.stacksize;
s.stacksize=110;
*s.top=e;
s.top++;
数据元素入栈成功!
*s.top=e;
s.top++;
弹出堆栈--数据元素出栈
intpop(sqstack&
s,int&
if(s.top==s.base)
栈为空,不能弹出数据元素!
s.top--;
e=*s.top;
//操作4:
求栈的长度
intsqstacklength(sqstack&
returns.top-s.base;
//操作5:
判断栈是否为空
intemptysqstack(sqstack&
{//若为空栈,则返回1,否则返回0
if(s.top==s.base)
空栈!
非空栈!
voidconversion(intn,intm)
sqstacksb;
initsqstack(sb);
while(n!
=0)
push(sb,n%m);
n=n/m;
while(sb.top!
=sb.base)
pop(sb,x);
switch(x)
case10:
A"
break;
case11:
B"
case12:
C"
case13:
D"
case14:
E"
case15:
F"
default:
}
sqstacksa;
initsqstack(sa);
push(sa,10);
105;
push(sa,10*(i+1));
if(sa.top-sa.base==sa.stacksize)
栈满!
pop(sa,x);
x=%d\n"
conversion(255,8);
6、循环队列
//构造循环队列的数据结构
intfront;
intrear;
}sqQueue;
//算法程序1:
循环队列的初始化
//用户自定义函数的构成:
(1)函数首部:
函数的返回值类型,
函数名,形参列表
(2)函数体
intinitsqQueue(sqQueue&
q)
q.base=(int*)malloc(100*sizeof(int));
if(q.base!
循环队列初始化成功!
q.front=q.rear=0;
//数据元素e进入队列q
intensqQueue(sqQueue&
q,inte)
if((q.rear+1)%100==q.front)
循环队列满,数据元素不能进入队列!
q.base[q.rear]=e;
q.rear=(q.rear+1)%100;
数据元素入队列成功!
//数据元素出队列
intdesqQueue(sqQueue&
q,int&
if(q.front==q.rear)
循环队列为空,不能出队列!
e=q.base[q.front];
q.front=(q.front+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构
![提示](https://static.bdocx.com/images/bang_tan.gif)