数据结构伪代码转化为源代码尊重原作者的劳动,我只是个学习者,见此文章,感觉很有用,愿与大家一起分享-----百度文库:桔紫蓝*/--------------------------------------------------------------------------------------*/出自:编程中国*/作者:cobbyE-mail:jiaxuanyao1982@163.comQQ:51160333*/时间:2007-10-26编程论坛首发*/声明:尊重作者劳动,转载请保留本段文字*/--------------------------------------------------------------------------------------前言:这些是前几年我在大专教书时,数据结构课程中给学生写的学习例程,对于初学者有一定帮助。在此收集到一起,当个共享贴贡献给广大网友和编程爱好者。一般程序都不难也不大,并且所有例程均有较详细注释,适合自学。中间有一个“哈夫曼编码”,程序较大,希望能给大家一点启示。以下所有程序均在VC++6.0开发环境中调试通过,运行正常。有任何疑问可以“另外”发贴讨论。更多内容请访问我的博客。自认为本贴内容充实,对网友会所很大帮助,请版主或者管理员置顶加精,谢谢。数据结构与算法基本程序目录一、线性表及其操作1、尾插法建立一个单链表,并按顺序输出2、单链表的元素查找,按内容查找3、元素插入操作4、按内容元素删除操作5、按位置删除元素6、建立双向链表7、单链表就地逆置8、约瑟夫环问题二、栈及其操作1、建立堆栈2、进栈与出栈3、栈的应用,括号匹配三、队及其操作1、链队列的建立2、入队和出队3、循环队列建立4、循环队列的入队和出队操作四、串及其操作1、串的朴素匹配五、树(二叉树)及其操作1、二叉排序树2、哈夫曼编码六、排序1、冒泡排序2、直接选择排序法一、线性表及其操作//Allcopyrightarepreservedbycobby/*尾插法建立一个单链表,并按顺序输出*/#defineNULL0/*宏定义*/typedefstructnode/*定义结点类型的数据结构*/{charc;/*数据域,类型为字符型*/structnode*next;/*指针域,类型为本结构体类型*/}*L;/*类型重定义,即Node和*L和structnode等价*/main(){Ll,p,q;/*用指针类型定义三个结点类型的指针*/charch;l=(L)malloc(sizeof(L));/*分配内存空间*/l-c='\0';/*为头结点的数据域赋值,值为空*/l-next=NULL;/*指明下一个结点目前不存在*/q=l;/*q为游动指针,链表结点的连结要用*/printf(Inputacharacter:\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(%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移至下一个元素重复输出操作*/}}//Allcopyrightarepreservedbycobby/*单链表的元素查找,按内容查找*/#defineNULL0/*宏定义*/typedefstructnode/*定义结点类型的数据结构*/{charc;/*数据域,类型为字符型*/structnode*next;/*指针域,类型为本结构体类型*/}*L;/*类型重定义,即Node和*L和structnode等价*/main(){Ll,p,q;/*用指针类型定义三个结点类型的指针*/charch;intn;l=(L)malloc(sizeof(L));/*分配内存空间*/l-c='\0';/*为头结点的数据域赋值,值为空*/l-next=NULL;/*指明下一个结点目前不存在*/q=l;/*q为游动指针,链表结点的连结要用*/printf(Inputacharacter:\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(%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(\nInputacharacteryouwannafind\n);scanf(%c,&ch);printf(\nthecharacteryouwannafindis%c\n,ch);q=l-next;/*q移至头结点的后一个元素,即实际第一个数据点*/n=1;//位置计数器while(q!=NULL)/*若q不为空,即该结点存在*/{if(q-c==ch)/*字符匹配*/printf(characterfoundinposition%d\n,n);q=q-next;/*移至下一个元素继续查找*/n++;}}//Allcopyrightarepreservedbycobby/*元素插入操作*/#defineNULL0/*宏定义*/typedefstructnode/*定义结点类型的数据结构*/{charc;/*数据域,类型为字符型*/structnode*next;/*指针域,类型为本结构体类型*/}Node,*L;/*类型重定义,即Node和*L和structnode等价*/main(){Ll,p,q;/*用指针类型定义三个结点类型的指针*/charch;intpos,n;l=(L)malloc(sizeof(Node));/*分配内存空间*/l-c='\0';/*为头结点的数据域赋值,值为空*/l-next=NULL;/*指明下一个结点目前不存在*/q=l;/*q为游动指针,链表结点的连结要用*/printf(Inputacharacter:\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();}q=l;/*输入整个链表前,先将q移到链表头,l一般不动*/while(q-next!=NULL)/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/{printf(%c--,q-next-c);/*q-next-c表示q所指向的下一个元素的数据*/q=q-next;/*完成该元素的输出后,q移至下一个元素重复输出操作*/}/*以上为建立一个单链表*/printf(Inputthecharacteranditsposition,suchass,3\n\n);scanf(%c,%d,&ch,&pos);q=l;n=1;while(n!=pos&&q-next!=NULL)/*未找到插入位置,且后面还有元素*/{q=q-next;n++;}/*退出循环后,要么找到插入位置,要么表已到最后,输入的插入位置过大*/if(npos)/*表已读完,仍未找到插入位置*/printf(\n\nincorrectposition,insertfailed\n\n);else/*找到插入位置*/{/*将进行插入操作*/p=(L)malloc(sizeof(Node));/*给新输入的数据分配内存空间*/p-c=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移至下一个元素重复输出操作*/}}//Allcopyrightarepreservedbycobby/*按内容元素删除操作*/#includemalloc.h#includestdio.h#defineNULL0/*宏定义*/typedefstructnode/*定义结点类型的数据结构*/{charc;/*数据域,类型为字符型*/structnode*next;/*指针域,类型为本结构体类型*/}Node,*L;/*类型重定义,即Node和*L和structnode等价*/main(){Ll,p,q;/*用指针类型定义三个结点类型的指针*/charch;intn;l=(L)malloc(sizeof(Node));/*分配内存空间*/l-c='\0';/*为头结点的数据域赋值,值为空*/l-next=NULL;/*指明下一个结点目前不存在*/q=l;/*q为游动指针,链表结点的连结要用*/printf(Inputacharacter:\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();}q=l;/*输入整个链表前,先将q移到链表头,l一般不动*/while(q-next!=NULL)/*若q所指向的元素后面还有其它元素,则将该元素的数据输出*/{printf(%c--,q-next-c);/*q-next-c表示q所指向的下一个元素的数据*/q=q-next;/*完成该元素的输出后,q移至下一个元素重复输出操作*/}/*以上为建立单链表*/printf(inputthecharacteryouwannadelete\n\n);scanf(%c,&ch);printf(t