首页 【C语言数据结构】顺序线性表整理

【C语言数据结构】顺序线性表整理

举报
开通vip

【C语言数据结构】顺序线性表整理#include"stdio.h" #include"stdlib.h" #define LEN 15 //定义顺序表的初始长度为10 #define LADD 20 //定义顺序表越界后增加长度为10 #define N sizeof(int) //计算整型数据所占内存字节数 typedef struct{ int *n; //顺序表元素指针数组,注:*n相当于n[LEN] int l; //记录当前顺序表最后元素的长度标号 int s; //记录顺序表总长度 }LIST; //定义顺序表类型数据结构 LIST ...

【C语言数据结构】顺序线性表整理
#include"stdio.h" #include"stdlib.h" #define LEN 15 //定义顺序表的初始长度为10 #define LADD 20 //定义顺序表越界后增加长度为10 #define N sizeof(int) //计算整型数据所占内存字节数 typedef struct{ int *n; //顺序表元素指针数组,注:*n相当于n[LEN] int l; //记录当前顺序表最后元素的长度标号 int s; //记录顺序表总长度 }LIST; //定义顺序表类型数据结构 LIST creat(void); //顺序表初始化 LIST insert(LIST *L,int x,int i); //插入元素函数,形参顺序(顺序表指针,插入的元素值,插入点下标) LIST del(LIST *L,int x,int i); //删除元素函数,形参顺序(顺序表指针,删除的元素值,删除点下标) int search(int x,LIST *L); //查找插入元素位置函数,形参顺序(元素值,顺序表指针) int search2(int x,LIST *L); //查找删除元素位置 void main() { int i,j,x; //i为元素下标;j为控制循环变量;x为插入的元素 char c='y'; //c为是否继续循环的判断变量 LIST L; //创建顺序表类型数据 L=creat(); //初始化顺序表 while(c=='y'||c=='Y') //循环体 { for(j=0;j<15;j++) //先为顺序表赋15个元素值 { puts("Input inset x:"); scanf("%d",&x);getchar(); i=search(x,&L); L=insert(&L,x,i); } puts("After insert:"); for(j=0;jL->l){puts("Error!Out of List Length!");exit(0);} //合法性检查:下标i范围应在[0,L->l]区间内 else { if(L->l>=L->s) //检验是否越界 { newn=(int *)realloc(L->n,(LEN+LADD)*N); /*若最后元素的长度大于或等于顺序表总长度时,则须为顺序表重新分配内存空间,大小为LEN+LADD个N字节*/ if(!newn){puts("Realloc Failed!");exit(0);} //内存分配失败 L->n = newn; //将新的内存地址赋给顺序表元素指针 L->s += LADD; //顺序表总长自增LADD } p = &L->n[i]; //将插入点地址赋给p for(q=&L->n[L->l-1];q>=p;q--) //插入点之后的元素依次后移 *(q+1)=*q; *p=x; //将插入的元素值赋给*p L->l++; //最末元素长度标号增1 } return *L; //返回顺序表指针 } int search(int x,LIST *L) //查找插入点下标 { int i=0; //i初始值为0,从L->n[0]开始查找 while((x>L->n[i])&&(L->n[i]>-10000)) //判断是否找到,若未找到i曾1 i++; return i; //返回i值 } int search2(int x,LIST *L) //查找删除点下标 { int i=0; //i初始值为0,从L->n[0]开始查找 while((x!=L->n[i])&&(L->n[i]>-10000)) //判断是否找到,若未找到i曾1 i++; if(i>=L->l) //如果i值大于或等于L->l,则顺序表中不存在x,返回错误信息 return -1; return i; //返回i值 } LIST del(LIST *L,int x,int i) //删除元素 { int *p,*q; //*p为删除元素指针;*q顺序表元素指针 if(i<0||i>L->l) //合法性检查 {puts("ERROR!");exit(0);} else { p = &L->n[i+1]; /*将第i+1个元素的地址赋给p。注:i从0开始,故自第i+1个元素起,逐个将前一元素覆盖*/ for(q = &L->n[L->l-1];p<=q;p++) *(p-1)=*p; L->l--; //注:只是后一个元素将前一个元素覆盖,删除元素的地址仍存在 } return *L; }
本文档为【【C语言数据结构】顺序线性表整理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_724170
暂无简介~
格式:doc
大小:36KB
软件:Word
页数:3
分类:工学
上传时间:2011-10-30
浏览量:28