括号匹配文件目录递归拷贝,

1、主题2、学习视频和资料

视频?courseId=555010#/learn/video?lessonId=701019&courseId=555010

?courseId=555010#/learn/video?lessonId=702024&courseId=555010

3、实现

数组或列表实现

4、应用栈

编程中的括号匹配、四则运算

队列

交互式程序中生产消费队列

5、知识体系栈的基本操作用栈来检测表达式中的括号是否匹配

问题:(1)栈什么时候为空?标记法

a、栈底存储特殊标记

b、记录栈底的位置

(2)栈溢出怎么办?

a、开辟固定空间,设置一个计数值,,如果达到上限,就申请新空间。

b、链式的,入一个就开辟一个空间。(效率低)

更多的时候使用栈时是连续的空间,而不是链式。

场景分析:

6、程序框架typedef struct _member{char ch;//单元内容int line;//行号int column;//列号}node,*pnode; typedef struct _stack_ds //记录栈的信息{int size;//size of stackint memb;//number of membersnode ptr[0];//stack location 存放数据的位置}stack_ds,*pstack_ds; pstack_ds init_stack(int size){pstack_ds head = (pstack_ds)malloc(sizeof(stack_ds) + sizeof(node)*size);head->size = size;head->memb = 0;memset(head->ptr,'\0',sizeof(node)*size);return head;} void destroy_stack(pstack_ds head){free(head); //一次申请一次释放} void push_stack(pstack_ds head,char ch,int line,int column){if (head->memb == head->size){//realloc stack memory, to do}head->ptr[head->memb].ch = ch;head->ptr[head->memb].line = line;head->ptr[head->memb].column = column;head->memb++;} pnode pop_stack(pstack_ds head){if(head->memb == 0)return null;else{head->memb–;return head.ptr + head->memb;}} char fetch_top_memb(pstack_ds head){if(head->memb == 0)return -1;elsereturn head->ptr[head->memb – 1].ch;} /*判断栈是否空*/int empty_stack(pstack_ds head){if (head->member <= 0){return 1;}elsereturn 0;} int main(int argc,char *argv[]){if(argc < 2){printf("pls usage %s filename\n",argv[0] );exit(EXIT_FAILURE);}FILE *fp = fopen(argv[1],"r");if (fp == NULL){perror("fopen");exit(EXIT_FAILURE);}fclose(fp);}补充void *memset(void *s, int ch, size_t n) 函数

资料:?url=iJtPH2Y5qaWD9DpIkIoNEwIsLpEV88fE3WmciPLuACVCLfcbaOeb6MPcfyVyWeAKu1L7OtGyHwZEncV077jBKa

语句:memset(head->ptr,’\0′,sizeof(node)*size);

操作对象:连续内存块

函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。

作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

7、后记

有问题可邮件378632668@qq.com,欢迎讨论!

终究还是会从指缝中一滴一滴流淌干净。

括号匹配文件目录递归拷贝,

相关文章:

你感兴趣的文章:

标签云: