首页 线性表操作-示例程序

线性表操作-示例程序

举报
开通vip

线性表操作-示例程序线性表基本操作 /*00基本信息定义*/ #include "stdio.h" #include "malloc.h" #define SUCCESS 1 #define FAILURE 0 #define null 0 #define maxsize 100 typedef int datatype; typedef struct /*定义线性表(顺序结构)数据类型*/ { datatype data[maxsize]; int last; }sequenlist; i...

线性表操作-示例程序
线性表基本操作 /*00基本信息定义*/ #include "stdio.h" #include "malloc.h" #define SUCCESS 1 #define FAILURE 0 #define null 0 #define maxsize 100 typedef int datatype; typedef struct /*定义线性表(顺序结构)数据类型*/ { datatype data[maxsize]; int last; }sequenlist; int n; /*定义功能选择菜单函数*/ void print() { printf("----线性表(顺序结构)的基本操作----\n"); printf("----------开始----------\n"); } /*打印线性表(顺序结构)*/ void printout(sequenlist *L) { int i; for(i=1; i<=L->last; i++) printf(" [%d]", i); printf("\n"); for(i=1; i<=L->last; i++) printf("%6d", L->data[i]); printf("\n"); } /*01线性表(顺序结构)的初始化*/ int InitList(sequenlist *L) { L = (sequenlist *)malloc(sizeof(sequenlist)); if(!L) { return FAILURE; } else { L->last = -1; return SUCCESS; } } /*02创建线性表(顺序结构)*/ void creatlist(sequenlist *L) { int i; int tmp; printf("请输入线性表中数据的个数:"); scanf("%d",&n); for(i=1; i<=n; i++) { printf("data[%d]=", i); fflush(stdin); /*清除掉键盘缓冲区*/ scanf ("%d", &tmp); L->data[i] = tmp; } L->last=n; } /*03在第i个结点前插入元素x(note:元素从1始计数)*/ int insert(sequenlist *L, datatype x,int i) { int j; if (L->last==maxsize)/*如果原线性表(顺序结构)已经满了*/ { printf("线性表(顺序结构)已满\n"); return 0; } else if ((i<1)||(i>L->last+1)) /*如果输入的i值超出范围*/ { printf("错了,请输入正确的'i'值\n"); return 0; } else { for(j=L->last; j>=i; j--) /*从第i个元素起,每个元素后移一位*/ L->data[j+1]=L->data[j]; L->data[i]=x; L->last=L->last+1; } return(1); } /*04删除第i个结点,note:元素从0始计数*/ int dellist(sequenlist *L,int i) { if ((i<1)||(i>L->last)) /*如果输入的i值超出范围*/ { printf ("错了,请输入正确的'i'值\n"); return 0; } else { for(;ilast; i++) /*从第i+1个元素起,每个元素前移一位*/ L->data[i]=L->data[i+1]; L->last=L->last-1; return(1); } } /*05求线性表(顺序结构)的长度*/ int CountList(sequenlist *L) { return L->last; } /*06清空线性表(顺序结构)*/ void ClearList(sequenlist *L) { L->last = -1; } /*07判断线性表(顺序结构)是否为空*/ bool ListIsEmpty(sequenlist *L) { return L->last == -1; } /*08按位置取线性表(顺序结构)中元素*/ datatype GetElem(sequenlist *L,int pos) { if ((L->last == -1) || (pos < 1) || (pos > L->last)) /*表为空或者位置不对*/ { printf("线性表为空,或者输入的位置有错!"); return FAILURE; } return L->data[pos]; } /*09按值查找的定位函数*/ int LocateList(sequenlist *L, datatype value) { int i = 0; if(L->last == -1) /*表为空*/ { printf("线性表为空"); return -1; } /*查找元素*/ for (i = 1; i <= L->last; i++) { if (value == L->data[i]) { break; } } /*没有找到元素*/ if (i > L->last) { return -1; } return i; } /*10附加操作函数*/ void AppendList(sequenlist *L, datatype item) { if(L->last == maxsize) /*表已满*/ { printf("线性表已满,不能附加新数据!\n"); } else { L->data[++L->last] = item; } } //主驱动函数 main() { sequenlist *L; int cmd; int x,i; print(); L=(sequenlist *)malloc(sizeof(sequenlist)); /*指针在使用前一定要初始化*/ do { printf("\n--------------------------\n"); printf("1......初始化\n"); printf("2......创建线性表(顺序结构)\n"); printf("3......插入\n"); printf("4......删除\n"); printf("5......线性表(顺序结构)长度\n"); printf("6......清空线性表(顺序结构)\n"); printf("7......判断线性表(顺序结构)是否为空\n"); printf("8......按位置取线性表(顺序结构)中元素\n"); printf("9......按值查找\n"); printf("10.....附加操作\n"); printf("11.....退出\n"); printf("----------请选择----------\n"); do { fflush(stdin); /*清除掉键盘缓冲区*/ scanf("%d",&cmd); } while((cmd!=1)&&(cmd!=2)&&(cmd!=3)&&(cmd!=4)&&(cmd!=5)&&(cmd!=6) &&(cmd!=7)&&(cmd!=8)&&(cmd!=9)&&(cmd!=10)&&(cmd!=11)); switch (cmd) { case 1: if(InitList(L)==1) { printf("线性表(顺序结构)初始化成功!\n"); printout(L); break; } else { printf("线性表(顺序结构)初始化失败!\n"); break; } case 2: printf("请根据提示创建线性表(顺序结构)!\n"); creatlist(L); printf("结果如下\n"); printout(L); break; case 3: printf("请输入你要插入的数据:"); fflush(stdin); /*清除掉键盘缓冲区*/ scanf("%d",&x); printf("请输入你要插入的位置:"); scanf("%d",&i); insert(L, x, i); printout(L); n++; break; case 4: printf("请输入你要删除元素的位置:"); fflush(stdin); /*清除掉键盘缓冲区*/ scanf("%d",&i); dellist(L, i); printout(L); n--; break; case 5: printf("线性表(顺序结构)长度为:"); printf("%d\n",CountList(L)); break; case 6: printf("清空线性表(顺序结构)!"); ClearList(L); printout(L); break; case 7: if(ListIsEmpty(L)) printf("线性表(顺序结构)已经被清空!\n"); else printf("线性表(顺序结构)不为空!\n"); printout(L); break; case 8: printf("请输入元素的位置序号:"); fflush(stdin); scanf("%d",&i); printf("该位置的元素为:%d",GetElem(L,i)); break; case 9: printf("请输入元素值:"); fflush(stdin); scanf("%d",&x); printf("该元素的位置序号为:%d",LocateList(L,x)); break; case 10: printf("请输入要附加的元素值:"); scanf("%d",&x); AppendList(L,x); printf("附加后:\n"); printout(L); break; } }while (cmd!=11); }
本文档为【线性表操作-示例程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_301676
暂无简介~
格式:doc
大小:42KB
软件:Word
页数:6
分类:
上传时间:2011-11-20
浏览量:19