严蔚敏教授的书,里面用了好多所谓的伪代码,个人不喜欢。好不容易把它们都翻译过来,弄得c不像c,c++不像c++的!就全当时复习数据结构了!
使用的是dc++编译器!tc2.0应该不行,因为用到了很多c++的东西~!
我觉得需要注意的就是那个指向函数的指针最函数参数的问题:
定义和声明的时候用的格式是(函数类型 *)函数名(形参表)
调用的时候什么都不用,直接用函数名
用指针指向的函数的参数应该放在调用它的函数的参数里,
这么说总觉得说不清,自己体会一下就好了!
定义顺序表的代码:
cpp 代码
-
-
-
-
-
-
-
-
-
- #define LIST_INIT_SIZE 10
- #define LISTINCREMENT 2
-
- typedef struct{
- int *elem;
- int lenght;
- int listsize;
- }SqList;
-
- void InitList(SqList &L){
- L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
- if(!L.elem)
- exit(1);
- L.lenght=0;
- L.listsize=LIST_INIT_SIZE;
- }
- void DestroyuList(SqList &L){
- free(L.elem);
- L.elem=NULL;
- L.lenght=0;
- L.listsize=0;
- }
- void ClearList(SqList &L){
- L.lenght=0;
- }
- int ListEmpty(SqList L){
- if(L.lenght==0)
- return 1;
- else
- return 0;
- }
- int ListLength(SqList L){
- return(L.lenght);
- }
- int GetElem(SqList L,int i,int &e){
- if(i<1||i>L.lenght)
- return 0;
- else
- e=*(L.elem+i-1);
- return 1;
- }
- int LocateElem(SqList L,int e,int (*compare)(int,int)){
- int i=1;
- int *p;
- p=L.elem;
- while(i<=L.lenght&&!compare(*p++,e))
- i++;
- if(i<=L.lenght)
- return i;
- else
- return 0;
- }
- int PriorElem(SqList L,int cur_e,int &pre_e){
- int i=2;
- int *p=L.elem+1;
- while(*p!=cur_e&&i<=L.lenght){
- i++;
- p++;
- }
- if(i<=L.lenght){
- pre_e=*--p;
- return 1;
- }
- else
- return 0;
- }
- int NextElem(SqList L,int cur_e,int &next_e){
- int i=1;
- int *p=L.elem;
- while(i
- p++;
- i++;
- }
- if(i
- next_e=*++p;
- return 1;
- }
- else
- return 0;
- }
- int ListInsert(SqList &L,int i,int e){
- int *newbase,*p,*q;
- if(i<1||i>L.lenght+1)
- return 3;
- if(L.lenght>=L.listsize){
- if(!(newbase=(int *)realloc(L.elem,(LISTINCREMENT+L.listsize)*sizeof(int))))
- return 0;
- L.elem=newbase;
- L.listsize+=LISTINCREMENT;
- }
- p=L.elem+i-1;
- for(q=L.elem+L.lenght-1;q>=p;q--)
- *(q+1)=*q;
- *p=e;
- L.lenght++;
- return 1;
- }
- int ListDelete(SqList &L,int i,int &e){
- if(i<1||i>L.lenght)
- return 0;
- int *p,*q;
- p=L.elem+i-1;
- e=*p;
- q=L.elem+L.lenght-1;
- for(;p
- *p=*(p+1);
- }
- L.lenght--;
- return 1;
- }
- void ListTraverse(SqList L,void(*visit)(int)){
- int i=1;
- int *p=L.elem;
- while(i<=L.lenght){
- i++;
- visit(*p++);
- }
- }
- int equal(int x,int y)
- {
- if(x==y)
- return 1;
- else
- return 0;
- }
- void unit(SqList &La,SqList Lb){
- int i,b,La_len;
- La_len=La.lenght;
- for(i=1;i<=Lb.lenght;i++){
- GetElem(Lb,i,b);
- if(!(LocateElem(La,b,equal)))
- ListInsert(La,++La_len,b);
- }
- }
- void unit_sq(SqList &La,SqList Lb){
- int *pa,*pb,i,j;
- for(i=1;i<=Lb.lenght;i++){
- pb=Lb.elem+i-1;
- for(j=1;j<=La.lenght;j++){
- pa=La.elem+j-1;
- if(*pa==*pb)break;
- }
- if(j>=La.lenght)
- *(pa++)=*pb;
- }
- }
- void MergeList(SqList La,SqList Lb,SqList &Lc){
- InitList(Lc);
- int i=1,j=1,ai,bi,k=0;
- while(i<=La.lenght&&j<=Lb.lenght){
- GetElem(La,i,ai);
- GetElem(Lb,j,bi);
- if(ai>=bi)
- ListInsert(Lc,++k,ai);
- else
- ListInsert(Lc,++k,bi);
- }
- while(i<=La.lenght){
- GetElem(La,i,ai);
- ListInsert(Lc,++k,ai);
- }
- while(j<=Lb.lenght){
- GetElem(Lb,j,bi);
- ListInsert(Lc,++k,bi);
- }
- }
- void MergeList_sq(SqList La,SqList Lb,SqList &Lc){
- InitList(Lc);
- Lc.lenght=Lb.lenght+La.lenght;
- Lc.listsize=La.listsize+Lb.listsize;
- Lc.elem=(int *)malloc(Lc.listsize*sizeof(int));
- int *pa,*pb,*pa_end,*pb_end,*pc;
- pa=La.elem;
- pb=Lb.elem;
- pa_end=La.elem+La.lenght-1;
- pb_end=Lb.elem+Lb.lenght-1;
- pc=Lc.elem;
- while(pa<=pa_end&&pb<=pb_end){
- if(*pa>=*pb)
- *pc++=*pb++;
- else
- *pc++=*pb++;
- }
- while(pa<=pa_end){
- *pc++=*pa++;
- }
- while(pb<=pb_end){
- *pc++=*pb++;
- }
- }
验证部分的代码:main.cpp
cpp 代码
- #include<maloc.h></maloc.h>
#include<stdio.h></stdio.h>
#include<stdlib.h></stdlib.h><stdlib.h></stdlib.h>
-
- #include"2.1 Linear_list.h"
-
- void print1(int x){
- printf(".....print1.....\n");
- printf("%d \n",x);
- printf("......End.......\n");
- }
- int compare(int x,int y){
- printf("...compare...\n");
- if(x>y)
- return 1;
- else
- return 0;
- }
- int main(void){
- SqList L;
- int i,c;
- printf("现在开始操作每一个函数\n");
- printf("创建一个顺序表:使用InitList\n");
- InitList(L);
- printf("创建成功! \n");
- printf("使用ListInsert 依次插入数值11 22 33 44 77\n");
- ListInsert(L,1,11);
- ListInsert(L,2,22);
- ListInsert(L,3,33);
- ListInsert(L,4,44);
- ListInsert(L,5,77);
- printf("插入成功,用ListTraverse + print1显示\n");
- ListTraverse(L,print1);
- printf("使用ListDelete函数删除第3个元素\n");
- ListDelete(L,3,c);
- printf("删除了 %d\n",c);
- printf("删除成功,用ListTraverse + print1显示\n");
- ListTraverse(L,print1);
- printf("接下来我们获取第3个元素的数值,使用GetElem\n");
- GetElem(L,3,c);
- printf("第三个数值是 %d\n",c);
- printf("用PriorElem获得它的前驱\n");
- PriorElem(L,c,c);
- printf("前驱是:%d\n",c);
- printf("用NextElem获取那个前驱的后继\n");
- NextElem(L,c,c);
- printf("前驱是 %d\n",c);
- printf("使用LocateElem+commpare找出第一个比55大的序号\n");
- c=LocateElem(L,55,compare);
- printf("是第 %d 个!\n",c);
- printf("最后清空L,用ClearList\n");
- ClearList(L);
- printf("使用ListEmpty检验是否位空\n");
- if(ListEmpty(L))
- printf("为空\n");
- else
- printf("不为空\n");
- printf("销毁表,使用DestroyuList\n");
- DestroyuList(L);
- printf("彻底OK");
- getchar();
- return 1;
- }
- 1.rar (11.4 KB)
- 描述: 源文件
- 下载次数: 26
分享到:
相关推荐
顺序表是一种简单但实用的数据结构,它将元素以线性方式存储在一块连续的内存空间里,便于快速访问和操作。 1. **顺序表的基本概念** 顺序表是由数组实现的线性表,它的特点是存储空间连续,元素间逻辑顺序与物理...
数据结构是计算机科学中的...总之,理解并能熟练地在C语言中实现顺序表的基本操作是学习数据结构的关键步骤。通过这个过程,你可以深入理解数据结构的工作原理,为未来更复杂的数据结构和算法的学习打下坚实的基础。
在本主题中,我们关注的是“数据结构(C语言版)”的源代码,这是一份补充电子课件,旨在帮助学生深入理解数据结构的概念,并通过实际编程实践来巩固这些概念。 1. **排序算法(code8_Sort.c)** 这个文件可能包含...
通过严蔚敏的《数据结构(C语言版)》的代码集,你可以学习到如何用C语言实现这些数据结构,并理解它们在内存中的布局和操作。实践这些代码将有助于深化对数据结构的理解,提高编程能力,为后续的算法分析和复杂问题...
"数据结构C语言版严蔚敏完整源码"是一个包含严蔚敏教授编著的《数据结构》一书的C语言实现代码库,对于学习和理解数据结构有着极高的参考价值。 首先,严蔚敏的《数据结构》是中国计算机教育的经典教材,书中详细...
本主题聚焦于“数据结构C语言中的顺序表操作”,这是一种基础但至关重要的数据结构概念。 顺序表是由一组相同类型的数据元素构成的线性序列,这些元素在内存中按顺序存储。在C语言中,我们通常使用数组来实现顺序表...
本压缩包包含的是C语言版本的数据结构代码,是学习和理解数据结构的基础。 1. **数组**:数组是最基本的数据结构,它允许我们在同一类型的数据之间建立固定大小的集合。C语言中的数组可以用来存储整型、浮点型、...
C语言数据结构实现顺序表的动态申请内存并且合并,代码可以直接使用。
本资源提供了数据结构C语言版的全部代码实现,非常适合学习和实践数据结构。 首先,让我们逐个章节探讨这些文件可能涵盖的内容: 1. **ch1 - 数据结构基础** 这一章通常会介绍数据结构的基本概念,包括数组、链表...
在计算机科学中,数据结构是组织、存储和处理数据的方式,它是算法...以上就是关于“数据结构 顺序表的实现(C语言版)”的主要内容,通过理解这些知识点,开发者可以更好地掌握顺序表的原理,并在实际编程中灵活运用。
《数据结构(C语言版)(第2版)》是一本经典教材,由严蔚敏、李冬梅和吴伟民合著,ISBN为9787115379504。这本书深入浅出地介绍了数据结构的基本概念、设计方法以及C语言实现,是学习数据结构的理想读物。 在本书中...
总的来说,严蔚敏教授的《数据结构》C语言版是一本宝贵的教材,它通过源代码实例使抽象的数据结构概念变得具体可操作。掌握这些知识对于任何想要深入计算机科学,特别是软件开发领域的人来说都是至关重要的。通过...
在这个"C语言数据结构线性表实验"中,我们将深入探讨两种实现线性表的方法:顺序表和链表。 1. **顺序表**: - **定义**:顺序表是将数据元素存储在一块连续的内存区域中,每个元素都有一个固定的索引位置。 - **...
C语言形式的顺序表结构源代码,但没有界面,仅仅适合学习和实验用
在本文档中,我们主要探讨了两种数据结构的逆置操作,它们是顺序表和单链表。顺序表是线性结构的一种,它的所有元素在内存中是连续存放的;而单链表则是另一种线性结构,每个元素(节点)包含数据和指向下一个节点的...