1、当前存储空间已满,增加分配* )realloc(L.elem,(Listsize+LISTINCREMENT)*sizeof(ElemType);if(!newbase)exit(OVERFLOW); / 存储分配失败L.elem =newbase; 新基址L. listsize +=LISTINCREMENT; / 增加存储容量q=&(L.elem i-1); q 为插入位置for(p=&(L.clcm L.lcngth -l);p=q;-p)*(p+l)=*p; /插入位置及之后的元素右移*q=e; 插入 e+L.length ; 表长增 1return OK;)/ListInsert_S
2、qStatus ListDclete_Sq(SqList &L,int LElcmTypc &c)在顺序线性表L中删除第i个元素,并用c返回其值/i 的合法值为 l=ListLength_Sq(L)=L.length) return i;else return 0;)/LocateEIem_Sqvoid MergeList_Sq(SqList La.SqList Lb,SqList &Lc )已知顺序线性表La和Lb的元素按值非递减排列归并La和Lb得到新的顺序线性表Lc, Lc的元素也按非递减排列ElemType *pa,*pb,*pc,*pajast,*pbJast;pa=La.elem;
3、pb=Lb.elem;Lc.listsize =Lcength =Laength +LK1 ength ;pc=Lc.eleni =(ElemType *)inalloc(Lc.listsize *sizeof(ElemType);Lc.elem )exit(OVERFLOW); /存储分配失败paJast=La.elem + La.length -1;pb_last=Lb.elem +Lbength -1;while(pa=pa_last & pb=pbast)归并if(*pa=*pb)*pc+=*pa+;else*pc+=*pb+;=pa_last) *pc+=*pa+; 插入 La 的剩
4、余元素while(pbnext:intj=l; 初始化,p指向第一个结点,j为计数器while(p&jvi)顺指针向后查找,直到p指向第i个元素或p为空 p=p-+j;pllji)return ERROR; 第i个元素不存在e=p-data; 取第i个元素return OK:)/GetEIem_LStatus ListInsert_L(LinkList &LJnt i,ElemType e)在带头结点的单链线性表L中第i个位宜之前插入元素eLinkList p,s;p=L;int j=0;jvil)p=p-next; 寻找第i-1个结点i-l ) return ERROR; /i 小于或者大于
5、表长+1 s=(LinkList)nialloc (sizeof(LNode); 生成新结点s-data=e;next=p- 插入 L 中p-next=s;/ListInsert_LStatus ListDeIete_L(LinkList &Lint i.ElemType &在带头结点的单链线性表L中,删除第i个元素,并由c返回其值LinkList p.q;while(p-next&jnext)llji-l) return ERROR; 删除位垃不合理q=p-next=q- 删除并释放结点e=q-free(q);)/ListDelete_Lvoid CreateList_L(LinkList
6、&L jnt n)逆位序输入n个元素的值,建立带表头结点的单链线性表LLinkList p;L=(LinkList)malloc(sizeof(LNode);L-next =NULL: 先建立一个带头结点的单链表for(int i=n;i0;-i)p=(LinkList)malloc (sizeof(LNode);scanf(n%dM,&data); 输入元素值next=L-next =p; 插入到表头)/CreateList_Lvoid display(LinkList L) LinkList p=L-泄义for循环函数 while(p)(printf(n%d/p- p=p-Xn11);vo
7、id inain()LinkList L;CreateList_L(L.3); display(L);ListInsert_L(L,2J 00);ElemType e;ListDelete_LXL,2,e);printfC 被删除的值=%dn”,e);GetElem_L(U3x);prin叱获取的值=%dn,e);第四次上机#include include =S.stacksize )/栈满,追加存储空间S.base =(SElemType * )realloc(S.base JS.stacksize +STRCKINCREMENT) * sizeof(SElemType);S.top =S.
8、base +S.stacksize ;S.stacksize +=STRCKINCREMENT:* S.top +=c: return OK;)/PushStatus Pop(SqStack &S.SElemType &若栈不空,则删除S的栈顶元素,用e返回其值,并返回0K;否则返回ERRORif(S.top =S.base )return ERROR;e=*-S.top;/PopStatus StackEmpty(SqStack S)if(S.top=S.base)return TRUE;else return ERROR: void conversion()/对于输入的任意一个非负十进制整
9、数,打印输出与其等值的八进制数SqStack S;int N;SElcmTypc e;InitStack(S); 构造空栈scanf(,%d,&N);while(N)Push(S,N % 8);N=N/8;printf(”转换成八进制后的数为:”);while(!StackEmpty(S)Pop(S.e);printf(,%d,e);printf(HnM);/conversion void main()SElemType c,x;Push(S5);Push(S4);Push(S3);Push(S2);Push(SJ);GetTop(Sx); printfC* 栈顶元素为 %diie);prin
10、tf(Hn,r);Pop(S.x);删除的栈顶元素为dn,x);printf(,nH);输入一个十进制数: conversion();第五次上机/*队列的链式存储钉#define FALSE 0typedef int QElemTpe;typcdcf int Status;typedef stmet QNodeQElemType data; struct QNode *next;QNode,*QueuePtr;typedef stnictQueuePtr front; 队头指针QueuePtr rear; 队尾指针JLinkQueue;Status InitQueuc(LinkQueue &Q
11、)/构造一个空队列QQ.front =Q.rear =(QueuePtr)malloc(sizeof(QNode);Q.front )exit(OVERFLOW);Q.front -next =NULL;Status DestroyQueue(LinkQucue &销毁队列Qwhile(Q.front)Q.rear =Q.front -free(Q.front);Q.front =Q.rear;Status EnQueue(LinkQueue &Q.QElcmTypc e)插入元素e为Q的新的队尾元素QueuePtr p;p=(QueucPtr)maIloc zcof(QNodc);p)exi
12、t(OVERFLOW);next=NULL;Q.rear Q.rear =p:Status DeQucue(LinkQueue &Q.QElemType &若队列不为空,则删除Q的队头元素,用e返回其值,并返回0K:否则返回ERRORif(Q.front =Q.rear )return ERROR;p=Q.front -next =p-if(Q.rear =p)Q.rear =Q.front;free(p);)void disp(LinkQueuc Q)p=Q.front-左义for循环函数while(p)printf(H%d *p-printf(MnH);void main()LinkQue
13、ue Q;QElemType e;InitQueue(Q);插入的元素为:EnQueue(Q,25);EnQueue(Q.5);EnQueue(QJ2);EnQueue(Q,60);EnQueue(Q33);disp(Q);printfC删除队头元素后:DeQueue(Qx);DestroyQueue(Q);if(DestroyQueue(Q )= 1) printfC销毁队列成功! n); elseprintfC销毁队列失败!附加:/*队列的顺序存储*/最大队列长度#dcfine MAXQSIZE 100typcdef stmct QElemType *base int front; int
14、 rear;JSqQueue;/初始化的动态分配存储空间头指针,若队列不空,指向队列头元素尾指针,若队列不空,指向队列尾元素的下一个位置Status InitQueue(SqQueue &构造一个空队列Q.base =(QElcmTypc *)malloc(MAXQSIZE * sizeof(QElcmType);Q.base )exit(OVERFLOW);Q.front =Q.rear =0;int QueueLenth(SqQueue Q)返回Q的元素个数,即队列的长度return(Q.rear Q.from +MAXQSIZE)%MAXQSIZE:Status EnQueue(SqQu
15、eue &Q.QElemType e)if(Q.rear +1)% MAXQSIZE =Q.front) return ERROR; 队列满 Q.base Q.rear =e;Q.rear =(Q.rear+1) % MAXQSIZE;Status DeQueue(SqQueue &若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK:if(Q.front =Q.rear) return ERROR;e=Q.base Q.front ;Q.front =(Q.front+l)% MAXQSIZE:第六次上机#define TRUE 1typedef char TElemType;/二叉树
16、的二叉链表存储表示typedef stmet BiTNodeTEIemT-pe data;struct BiTNode *lchild?rchild; /左右孩子指针BiTNode,*BiTree;Status CrcatcBiTree( BiTree &T)/按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,构造二叉树链表表示的二叉树Tchar ch;scai】f(”c:ch);if(ch=* *)T=NULL;else(T=(BiTNode *)malloc(sizeof(BiTNode) exit(OVERFLOW);T-data =ch; 生成根结点CreateBiTree(T-lchild); 构造左子树rchild); 构造右子树)/CreateBiTrecvoid PreOrderTraverse(BiTree T)先序遍历printf(H%c gdata); 输出结点PreOrderTraverse(T-lchild );rchild );void InOrderTraverse(BiTree T)中序遍历print
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1