日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

数据结构读书笔记(三)(C语言)

發布時間:2025/3/20 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构读书笔记(三)(C语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?棧

順序實現:

存儲結構:

?

#define STACK_INIT_SIZE 10 // 存儲空間初始分配量#define STACK_INCREMENT 2 // 存儲空間分配增量struct SqStack{SElemType *base; // 在棧構造之前和銷毀之后,base的值為NULLSElemType *top; // 棧頂指針int stacksize; // 當前已分配的存儲空間,以元素為單位}; // 順序棧


基本操作:


?

void InitStack(SqStack &S){ // 構造一個空棧Sif(!(S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))exit(OVERFLOW); // 存儲分配失敗S.top=S.base;S.stacksize=STACK_INIT_SIZE;}void DestroyStack(SqStack &S){ // 銷毀棧S,S不再存在free(S.base);S.base=NULL;S.top=NULL;S.stacksize=0;}void ClearStack(SqStack &S){ // 把S置為空棧S.top=S.base;}Status StackEmpty(SqStack S){ // 若棧S為空棧,則返回TRUE,否則返回FALSEif(S.top==S.base)return TRUE;elsereturn FALSE;}int StackLength(SqStack S){ // 返回S的元素個數,即棧的長度return S.top-S.base;}Status GetTop(SqStack S,SElemType &e){ // 若棧不空,則用e返回S的棧頂元素,并返回OK;否則返回ERRORif(S.top>S.base){e=*(S.top-1);return OK;}elsereturn ERROR;}void Push(SqStack &S,SElemType e){ // 插入元素e為新的棧頂元素if(S.top-S.base>=S.stacksize) // 棧滿,追加存儲空間{S.base=(SElemType *)realloc(S.base,(S.stacksize+STACK_INCREMENT)*sizeof(SElemType));if(!S.base)exit(OVERFLOW); // 存儲分配失敗S.top=S.base+S.stacksize;S.stacksize+=STACK_INCREMENT;}*(S.top)++=e;}Status Pop(SqStack &S,SElemType &e){ // 若棧不空,則刪除S的棧頂元素,用e返回其值,并返回OK;否則返回ERRORif(S.top==S.base)return ERROR;e=*--S.top;return OK;}void StackTraverse(SqStack S,void(*visit)(SElemType)){ // 從棧底到棧頂依次對棧中每個元素調用函數visit()while(S.top>S.base)visit(*S.base++);printf("\n");}


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?循環隊列

?

存儲結構

?

#define MAX_QSIZE 5 // 最大隊列長度+1struct SqQueue{QElemType *base; // 初始化的動態分配存儲空間int front; // 頭指針,若隊列不空,指向隊列頭元素int rear; // 尾指針,若隊列不空,指向隊列尾元素的下一個位置};

?



基本操作:

??

?

void InitQueue(SqQueue &Q){ // 構造一個空隊列QQ.base=(QElemType *)malloc(MAX_QSIZE*sizeof(QElemType));if(!Q.base) // 存儲分配失敗exit(OVERFLOW);Q.front=Q.rear=0;}void DestroyQueue(SqQueue &Q){ // 銷毀隊列Q,Q不再存在if(Q.base)free(Q.base);Q.base=NULL;Q.front=Q.rear=0;}void ClearQueue(SqQueue &Q){ // 將Q清為空隊列Q.front=Q.rear=0;}Status QueueEmpty(SqQueue Q){ // 若隊列Q為空隊列,則返回TRUE;否則返回FALSEif(Q.front==Q.rear) // 隊列空的標志return TRUE;elsereturn FALSE;}int QueueLength(SqQueue Q){ // 返回Q的元素個數,即隊列的長度return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;}Status GetHead(SqQueue Q,QElemType &e){ // 若隊列不空,則用e返回Q的隊頭元素,并返回OK;否則返回ERRORif(Q.front==Q.rear) // 隊列空return ERROR;e=Q.base[Q.front];return OK;}Status EnQueue(SqQueue &Q,QElemType e){ // 插入元素e為Q的新的隊尾元素if((Q.rear+1)%MAX_QSIZE==Q.front) // 隊列滿return ERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAX_QSIZE;return OK;}Status DeQueue(SqQueue &Q,QElemType &e){ // 若隊列不空,則刪除Q的隊頭元素,用e返回其值,并返回OK;否則返回ERRORif(Q.front==Q.rear) // 隊列空return ERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAX_QSIZE;return OK;}void QueueTraverse(SqQueue Q,void(*vi)(QElemType)){ // 從隊頭到隊尾依次對隊列Q中每個元素調用函數vi()int i;i=Q.front;while(i!=Q.rear){vi(Q.base[i]);i=(i+1)%MAX_QSIZE;}printf("\n");}


?


?? ?

?

總結

以上是生活随笔為你收集整理的数据结构读书笔记(三)(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。