1、数据结构伪代码转化成为可执行源代码数据结构伪代码转化为源代码尊重原作者的劳动,我只是个学习者,见此文章,感觉很有用,愿与大家一起分享 -XX文库:桔紫蓝*/ -*/ 出自: 编程中国?*/ 时间: 2007-10-26?编程论坛首发*/ 声明: 尊重作者劳动,转载请保留本段文字*/ -前言:这些是前几年我在大专教书时,数据结构课程中给学生写的学习例程,对于初学者有一定帮助。在此收集到一起,当个共享贴贡献给广大网友和编程爱好者。一般程序都不难也不大,并且所有例程均有较详细注释,适合自学。中间有一个“哈夫曼编码”,程序较大,希望能给大家一点启示。以下所有程序均在VC+6.0开发环境中调试通过,运行
2、正常。有任何疑问可以“另外”发贴讨论。更多内容请访问我的博客。自认为本贴内容充实,对网友会所很大帮助,请版主或者管理员置顶加精,谢谢。数据结构与算法基本程序目录一、?线性表及其操作1、?尾插法建立一个单链表,并按顺序输出2、?单链表的元素查找,按内容查找3、?元素插入操作4、?按内容元素删除操作5、?按位置删除元素6、?建立双向链表7、?单链表就地逆置8、?约瑟夫环问题二、?栈及其操作1、?建立堆栈2、?进栈与出栈3、?栈的应用,括号匹配三、?队及其操作1、?链队列的建立2、?入队和出队3、?循环队列建立4、?循环队列的入队和出队操作四、?串及其操作1、?串的朴素匹配五、?树(二叉树)及其操作
3、1、?二叉排序树2、?哈夫曼编码六、?排序1、?冒泡排序2、?直接选择排序法一、线性表及其操作/All copyright are preserved by cobby/*尾插法建立一个单链表,并按顺序输出*/#define NULL 0?/*宏定义*/typedef struct node?/*定义结点类型的数据结构*/?char c;?/*数据域,类型为字符型*/?struct node *next;?/*指针域,类型为本结构体类型*/*L;?/*类型重定义,即Node和*L和struct node等价*/main()?L l,p,q;?/*用指针类型定义三个结点类型的指针*/?char
4、ch;?l=(L)malloc(sizeof(L);?/*分配内存空间*/?l-c=0;?/*为头结点的数据域赋值,值为空*/?l-next=NULL;?/*指明下一个结点目前不存在*/?q=l;?/*q为游动指针,链表结点的连结要用*/?printf(Input a character:n);?scanf(%c,&ch);?getchar();?/此语句用来吸收键盘输入的回车符,没有其它含义?while(ch!=!)?/*输入!表示输入结束*/?p=(L)malloc(sizeof(L);?/*为新输入的数据分配内存空间*/?p-c=ch;?p-next=NULL;?/*新输入的结点在链表的
5、最后,即它的后面没有其它元素*/?q-next=p;?/*q用于将上一个元素链接至当前新元素*/?q=p;?/*q自己移到当前最后一个元素,以备继续链接所用*/?scanf(%c,&ch);?getchar();?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/All copyright are p
6、reserved bycobby/*单链表的元素查找,按内容查找*/#define NULL 0?/*宏定义*/typedef struct node?/*定义结点类型的数据结构*/?char c;?/*数据域,类型为字符型*/?struct node *next;?/*指针域,类型为本结构体类型*/*L;?/*类型重定义,即Node和*L和struct node等价*/main()?L l,p,q;?/*用指针类型定义三个结点类型的指针*/?char ch;?int n;?l=(L)malloc(sizeof(L);?/*分配内存空间*/?l-c=0;?/*为头结点的数据域赋值,值为空*/?
7、l-next=NULL;?/*指明下一个结点目前不存在*/?q=l;?/*q为游动指针,链表结点的连结要用*/?printf(Input a character:n);?scanf(%c,&ch);?getchar();?while(ch!=!)?/*输入!表示输入结束*/?p=(L)malloc(sizeof(L);?/*为新输入的数据分配内存空间*/?p-c=ch;?p-next=NULL;?/*新输入的结点在链表的最后,即它的后面没有其它元素*/?q-next=p;?/*q用于将上一个元素链接至当前新元素*/?q=p;?/*q自己移到当前最后一个元素,以备继续链接所用*/?scanf(%
8、c,&ch);?getchar();?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/*-以上为建立一个单链表-*/?printf(nInput a character you wanna findn);?scanf(%c,&ch);?printf(nthe character you wanna
9、find is %cn,ch);?q=l-next;?/*q移至头结点的后一个元素,即实际第一个数据点*/?n=1;?/位置计数器?while(q!=NULL)?/*若q不为空,即该结点存在*/?if(q-c=ch)?/*字符匹配*/?printf(character found in position %dn,n);?q=q-next;?/*移至下一个元素继续查找*/?n+;?/All copyright are preserved bycobby/*元素插入操作*/#define NULL 0?/*宏定义*/typedef struct node?/*定义结点类型的数据结构*/?char
10、c;?/*数据域,类型为字符型*/?struct node *next;?/*指针域,类型为本结构体类型*/Node,*L;?/*类型重定义,即Node和*L和struct node等价*/main()?L l,p,q;?/*用指针类型定义三个结点类型的指针*/?char ch;?int pos,n;?l=(L)malloc(sizeof(Node);?/*分配内存空间*/?l-c=0;?/*为头结点的数据域赋值,值为空*/?l-next=NULL;?/*指明下一个结点目前不存在*/?q=l;?/*q为游动指针,链表结点的连结要用*/?printf(Input a character:n);?
11、scanf(%c,&ch);?getchar();?while(ch!=!)?/*输入!表示输入结束*/?p=(L)malloc(sizeof(Node);?/*为新输入的数据分配内存空间*/?p-c=ch;?p-next=NULL;?/*新输入的结点在链表的最后,即它的后面没有其它元素*/?q-next=p;?/*q用于将上一个元素链接至当前新元素*/?q=p;?/*q自己移到当前最后一个元素,以备继续链接所用*/?scanf(%c,&ch);?getchar();?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后
12、面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/*以上为建立一个单链表*/?printf(Input the character and its position, such as s,3nn);?scanf(%c,%d,&ch,&pos);?q=l;?n=1;?while(n!=pos&q-next!=NULL)?/*未找到插入位置,且后面还有元素*/?q=q-next;?n+;?/*退出循环后,要么找到插入位置,要么表
13、已到最后,输入的插入位置过大*/?if(nc=ch;?p-next=q-next;?q-next=p;?/*操作完成,然后输出新表*/?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/All copyright are preserved bycobby/*按内容元素删除操作*/#include#i
14、nclude#define NULL 0?/*宏定义*/typedef struct node?/*定义结点类型的数据结构*/?char c;?/*数据域,类型为字符型*/?struct node *next;?/*指针域,类型为本结构体类型*/Node,*L;?/*类型重定义,即Node和*L和struct node等价*/main()?L l,p,q;?/*用指针类型定义三个结点类型的指针*/?char ch;?int n;?l=(L)malloc(sizeof(Node);?/*分配内存空间*/?l-c=0;?/*为头结点的数据域赋值,值为空*/?l-next=NULL;?/*指明下一个
15、结点目前不存在*/?q=l;?/*q为游动指针,链表结点的连结要用*/?printf(Input a character:n);?scanf(%c,&ch);?getchar();?while(ch!=!)?/*输入!表示输入结束*/?p=(L)malloc(sizeof(Node);?/*为新输入的数据分配内存空间*/?p-c=ch;?p-next=NULL;?/*新输入的结点在链表的最后,即它的后面没有其它元素*/?q-next=p;?/*q用于将上一个元素链接至当前新元素*/?q=p;?/*q自己移到当前最后一个元素,以备继续链接所用*/?scanf(%c,&ch);?getchar()
16、;?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/*以上为建立单链表*/?printf(input the character you wanna deletenn);?scanf(%c,&ch);?printf(the element you wanna delete is %cnn,ch);?
17、q=l-next;?p=l;?n=1;?while(q!=NULL&q-c!=ch)?p=q;?q=q-next;?n+;?/*退出循环时可能找到指定元素,也可能表读完,需要进一步判断*/?if(q=NULL)?printf(element not found, delete failednn);?else?p-next=q-next;?q=l-next;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q
18、=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/All copyright are preserved bycobby/*按位置删除元素*/#define NULL 0?/*宏定义*/typedef struct node?/*定义结点类型的数据结构*/?char c;?/*数据域,类型为字符型*/?struct node *next;?/*指针域,类型为本结构体类型*/Node,*L;?/*类型重定义,即Node和*L和struct node等价*/main()?L l,p,q;?/*用指针类型定义三个结点类型的指针*/?char ch;?int pos,n;?
19、l=(L)malloc(sizeof(Node);?/*分配内存空间*/?l-c=0;?/*为头结点的数据域赋值,值为空*/?l-next=NULL;?/*指明下一个结点目前不存在*/?q=l;?/*q为游动指针,链表结点的连结要用*/?printf(Input a character:n);?scanf(%c,&ch);?getchar();?while(ch!=!)?/*输入!表示输入结束*/?p=(L)malloc(sizeof(Node);?/*为新输入的数据分配内存空间*/?p-c=ch;?p-next=NULL;?/*新输入的结点在链表的最后,即它的后面没有其它元素*/?q-nex
20、t=p;?/*q用于将上一个元素链接至当前新元素*/?q=p;?/*q自己移到当前最后一个元素,以备继续链接所用*/?scanf(%c,&ch);?getchar();?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/*以上为建立单链表*/?printf(Input the positionn);?
21、scanf(%d,&pos);?p=l;?n=1;?while(p-next!=NULL&n!=pos)?p=p-next;?n+;?/*退出循环后,可能找到删除的元素位置,可能表读完,需要进一步判断*/?if(n=pos)?/*删除位置找到,删除该位置上的元素*/?p-next=p-next-next;?/free(p);?else?printf(incorrect position, delete failedn);?q=l;?/*输入整个链表前,先将q移到链表头,l一般不动*/?while(q-next!=NULL)?/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/?printf(%c-,q-next-c);?/*q-next-c表示q所指向的下一个元素的数据*/?q=q-next;?/*完成该元素的输出后,q移至下一个元素重复输出操作*/?/建立双向链表#include#include#include#define NULL 0typedef struct dlnode?char ch;?struct dlnode *pri,*next;dno
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1