顺序表的初始化及基本操作_第1页
顺序表的初始化及基本操作_第2页
顺序表的初始化及基本操作_第3页
顺序表的初始化及基本操作_第4页
顺序表的初始化及基本操作_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100 /线性表存储空间的初始分配量#define LINSTINCREMENT 10 /线性表存储空间的分配增量typedef int Status;#include<stdio.h> #include<stdlib.h>typedef int ElemType;int menu_select() /菜单函数 char c; do s

2、ystem("cls"); /运行前清屏 printf("tt*线性表的查找、插入、删除*n"); /菜单选择 printf("tt| a. 建立一个线性表 | n"); printf("tt| b. 查找线性表中第i个元素 | n"); printf("tt| c. 在线性表中第i个位置插入一个元素 | n"); printf("tt| d. 删除在线性表中第i个位置的元素 | n"); printf("tt| e. 输出线性表中的所有元素 | n");

3、 printf("tt*n"); printf("ttt请输入您的选择功能的序号(a-e):"); c=getchar(); printf("n"); printf("n"); while(c<'a'|c>'e'); return(c-'a'); /返回选择 typedef structint *elem; /存储空间基址int length; /当前长度int listsize; /当前分配的存储容量(以sizeof(ElemType)为单位)SqLis

4、t;SqList L;Status InitList_Sq(SqList &L) /构造一个新的线性表L。 int i,n; L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if (!L.elem) return ERROR; / 存储分配失败 L.length = 0; / 空表长度为0 L.listsize = LIST_INIT_SIZE; / 初始存储容量 printf("请输入线性表的元素的个数:"); scanf("%d",&n); for(i=0;i&

5、lt;n;i+) /读入元素 scanf("%d",&L.elemi); L.length =n; return OK; Status abc(SqList &L) /输出线性表中所有元素int i; for(i=0;i<L.length;i+) /利用循环输出元素 printf("%d ",L.elemi); return OK; void LocateElem_Sq(SqList L, ElemType e) /查找线性表中的元素 int i=0; ElemType *p; p = L.elem; while (i <=

6、L.length)&&(*p!=e) /依次比较 *p+,i+; if (i <= L.length) printf("元素%d在表中第%d个位置!n",e,i+1); else printf("表中没有元素%d!n",e); Status ListInsert_Sq(SqList &L, int i, ElemType e) / 在线性表L中插入新的元素e ElemType *p; int *newbase; if (i < 1 | i > L.length+1) return ERROR; if (L.len

7、gth >= L.listsize) / 当前存储空间已满,增加容量 ElemType *newbase = (ElemType *)realloc(L.elem, (L.listsize+LINSTINCREMENT)*sizeof (ElemType); if (!newbase) return ERROR; / 存储分配失败 L.elem = newbase; / 新基址 L.listsize += LINSTINCREMENT; / 增加存储容量 ElemType *q = &(L.elemi-1); / q为插入位置 for (p = &(L.elemL.len

8、gth-1); p>=q; -p) *(p+1) = *p; / 插入位置及之后的元素右移 *q = e; / 插入e +L.length; / 表长增1 return OK; Status ListDelete_Sq(SqList &L, int i, ElemType &e) / 在顺序线性表L中删除第i个元素,并用e返回其值。 ElemType *p, *q; if (i<1 | i>L.length) return ERROR; / i值不合法 p = &(L.elemi-1); / p为被删除元素的位置 e = *p; / 被删除元素的值赋给

9、e q = L.elem+L.length-1; / 表尾元素的位置 for (+p; p<=q; +p) *(p-1) = *p; / 被删除元素之后的元素左移 -L.length; / 表长减1 return OK; void main() /主函数 int n=0,a,e,i; for(;) switch(menu_select() /菜单选择 case 0: printf("tt*建立一个线性表*n"); InitList_Sq(L); /建立新表 system("pause"); break; case 1: printf("t

10、t*查找一个元素*n"); printf("输入要查找的元素:n"); scanf("%d",&e); LocateElem_Sq( L,e); /查找元素 system("pause"); break; case 2: printf("tt*插入一个元素*n"); printf("输入要插入的元素:n"); scanf("%d",&e); printf("输入要插入的位置:n"); scanf("%d",&a

11、mp;i); ListInsert_Sq(L,i,e); /插入新元素 printf("ttt"); system("pause"); break; case 3: printf("tt*删除一个元素*n"); printf("输入要删除的元素:n"); scanf("%d",&e); printf("输入要删除元素的位置:n"); scanf("%d",&i); ListDelete_Sq(L, i, e); /删除元素 printf("ttt"); system("pause"); break; case 4: printf("tt*输出线性表*n"); abc(L); /输出线性表 system("pause"); break; case 5: printf(&qu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论