C数据结构学习历程(1) 顺序表
2015-09-28 11:10
399 查看
我是参照《严蔚敏数据结构ppt》http://wenku.baidu.com/view/3ff16fc20242a8956aece41d.html以及《严蔚敏c数据结构视频》来写的,因为ppt上有些错,而视频上的代码不全,自己另写了。ppt上错哪,我就不指出了,大家可以对照着看,就能发现不同之处。
因为有注释,我直接copy代码了。
因为有注释,我直接copy代码了。
#include<iostream> using namespace std; #define OK 1 #define ERROR -1 #define MAX_SIZE 100 typedef int Status; typedef int ElemType; /*typedef Element ElementType; 则以下两种定义变量的方法是完全等价的。 struct Element e; ElementType e; 同样的也可以这样定义别名: typedef Element *ElementPtr; 则以下三种定义变量的方法是完全等价的。 struct Element *p; ElementType *p; ElementPtr p;*/ #define LIST_INIT_SIZE 80 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct sqlist { ElemType *elem; int length;//当前长度 int listsize;//当前分配的存储容量 }SqList; Status Init_SqList(SqList *L) //这里用指针,下面就要->,这里用&,下面就是. { L->elem=(ElemType *)malloc(MAX_SIZE *sizeof(ElemType)); if(!L->elem)exit(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK; } //在线性表L的第i 个位置上插入新节点e Status Insert_SqList(SqList *L,int i,ElemType e){ int j; if(i<1||i>L->length+1)return ERROR; if(L->length>=MAX_SIZE) { printf("线性表溢出\n"); return ERROR; } for(j=L->length-1;j>=i-1;--j){ //1<=i <=n L->elem[j+1]=L->elem[j]; //后移一位 } L->elem[i-1]=e; //在第几位插入,然后减1呗 L->length++; return OK; } //在第i 的位置删除 ElemType Delete_SqList(SqList *L,int i) //返回的删除的值 { int k;ElemType x; if(L->length==0){ printf("线性表L为空!\n");return ERROR; } else if(i<1||i>L->length){ printf("要删除的数据元素不存在!\n");return ERROR; } else { x=L->elem[i-1];//保存节点的值 for(k=i;k<L->length;k++){ L->elem[k-1]=L->elem[k];//前移一个位置 } L->length--; return (x); } } //顺序表的查找定位删除 Status Locate_Delete_SqList(SqList *L,ElemType x){ int i=0,k; //查找值为x的第一个节点 while (i<L->length) { if(L->elem[i]!=x)i++; else{ for(k=i;k<L->length;k++) L->elem[k-1]=L->elem[k];//前移一个位置 L->length--; break; } } if(i<0||i>L->length){ printf("要删除的数据元素不存在!\n");return ERROR; } return OK; } int main(){ SqList testList; Init_SqList(&testList); Insert_SqList(&testList,1,2); Insert_SqList(&testList,2,3); cout<<"删除前第一位值:"<<testList.elem[0]<<endl; Locate_Delete_SqList(&testList,2); cout<<"删除后第一位值:"<<testList.elem[0]<<endl; //int xx=Delete_SqList(&testList,1); return 0; }
相关文章推荐
- 图的三种数据结构
- 第9章 数据结构
- 中国大学MOOC-陈越、何钦铭-数据结构 一元多项式的乘法与加法运算
- 数据结构的地位
- 数据结构的基本概念和术语
- 数据结构研究的内容即定义
- 数据结构之关于栈的“先进后出”的理…
- 【数据结构导论】线性表
- 数据结构 带头结点的单链表 操作大全 最全的链表操作(c++实现)
- 数据结构之树
- 将帅问题解读
- 数据结构 顺序表(c++实现)
- 基本数据结构(1)——算法导论(11)
- 【数据结构之旅】稀疏矩阵的快速转置
- 数据结构实验一____单链表操作
- ACM题集以及各种总结大全!
- 数据结构实验1-顺序表-各种操作
- 数据结构------快排及另类快排思想解决问题
- [数据结构]二叉排序树
- 数据结构-线性表-栈-递归