赞
踩
- #include <stdio.h>
- #include <math.h>
- #include <time.h>
- #include <stdlib.h>
-
- #define OK 1
- #define ERROR 0
- #define TRUE 1
- #define FALSE 0
- #define MAXSIZE 20 /* 存储空间初始分配量 */
-
-
- typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */
- typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
-
- typedef struct
- {
- ElemType data[MAXSIZE];/* 数组,存储数据元素 */
- int length; /* 线性表当前长度 */
-
- }SqList;
-
- /* 初始化顺序线性表 */
- Status InitList(SqList *L)
- {
- L->length=0;
- return OK;
- }
-
- /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L), */
- /* 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 */
- Status ListInsert(SqList *L,int i,ElemType e)
- {
- int k;
- if (L->length==MAXSIZE)/* 顺序线性表已经满 */
- {
- printf("error:顺序线性表已满\n");
- return ERROR;
- }
- if (i<1||i>L->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */
- {
- printf("error:插入位置不合法\n");
- return ERROR;
- }
- if (i<=L->length) /* 若插入数据位置不在表尾 */
- {
- for (k=L->length-1;k>=i-1;k--)
- {
- L->data[k+1]=L->data[k];
- }
- }
- L->data[i-1]=e;
- L->length++;
- return OK;
- }
-
- //顺序表的建立,给线性表随机赋10个值
- SqList Create(SqList L)
- {
- int i;
- srand((unsigned)time(NULL));//产生一个种子不固定的随机数
- for (i=0;i<10;i++)
- {
- L.data[i]=rand()%100;
- L.length+=1;
- }
- return L;
- }
-
- //输出结构体中的一个元素
- Status visit(ElemType c)
- {
- printf("%d",c);
- return OK;
- }
-
- /* 初始条件:顺序线性表L已存在 */
- /* 操作结果:依次对L的每个数据元素输出 */
- Status ListTraverse(SqList L)
- {
- for (int i=0;i<L.length;i++)
- {
- visit(L.data[i]);
- printf("\n");
- }
- return OK;
- }
-
- //初始条件:顺序线性表L已存在。操作结果:若L为空表,则返回TRUE,否则返回FALSE
- Status ListEmpty(SqList L)
- {
- if (L.length==0)
- {
- return TRUE;
- }
- else
- return FALSE;
- }
-
- //初始条件:顺序线性表L已存在。操作结果:将L重置为空表
- Status ClearList(SqList *L)
- {
- L->length=0;
- return OK;
- }
-
- /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
- /* 操作结果:用e返回L中第i个数据元素的值,注意i是指位置,第1个位置的数组是从0开始 */
- Status GetElem(SqList L,int i,ElemType *e)
- {
- if(L.length==0 || i<1 || i>L.length)
- printf("范围错误\n");
- else
- {
- *e=L.data[i-1];
- }
- return OK;
- }
-
- /* 初始条件:顺序线性表L已存在 */
- /* 操作结果:返回L中第1个与e满足关系的数据元素的位序。 */
- /* 若这样的数据元素不存在,则返回值为0 */
- int LocateElem(SqList L,ElemType e)
- {
- int i;
- if (L.length==0)
- {
- printf("范围错误\n");
- return 0;
- }
- for(i=0;i < L.length;i++)
- {
- if (L.data[i]==e)
- break;
- }
- if(i>=L.length)
- {
- printf("不存在\n");
- return 0;
- }
- return i+1;
- }
-
- /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */
- /* 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 */
- Status ListDelete(SqList *L,int i,ElemType *e)
- {
- int k;
- if (L->length==0) /* 线性表为空 */
- return ERROR;
- if (i < 1 || i>L->length) /* 删除位置不正确 */
- return ERROR;
- *e=L->data[i-1];
- if (i < L->length)
- {
- for(k=i;k < L->length; k++)/* 将删除位置后继元素前移 */
- L->data[k-1]=L->data[k];
- }
- L->length--;
- return OK;
- }
- int main()
- {
- SqList L;
- ElemType e;
- Status i;
- char opp='A';
- int j,k;
- int pos;
- ElemType value;
- i=InitList(&L);
- printf("初始化成功:L.length=%d\n",L.length);
- printf("\n1.遍历线性表 \n2.线性表赋值 \n3.线性表插入 \n4.线性表重置为空表 \n5.线性表查找\n6.线性表元素定位\n7.删除线性表中的元素\n0.退出 \n请选择你的操作:\n");
- while (opp!='0')
- {
- scanf("%c",&opp);
- switch (opp)
- {
- case '1':
- ListTraverse(L);
- printf("\n");
- break;
- case '2':
- L=Create(L);
- printf("线性表的长度:%d\n",L.length);
- printf("现在线性表为:\n");
- ListTraverse(L);
- printf("\n");
- break;
- case '3':
- printf("请输入插入元素位置:");
- scanf("%d",&pos);
- printf("请输入插入元素的值:");
- scanf("%d",&value);
- i = ListInsert(&L,pos,value);
- printf("插入完毕,现在线性表为:\n");
- ListTraverse(L);
- printf("线性表的长度:%d\n",L.length);
- printf("\n");
- break;
- case '4':
- i=ClearList(&L);
- printf("清空L后:L.length=%d\n",L.length);
- break;
- case '5':
- printf("你要查找第几个元素? ");
- scanf("%d",&pos);
- GetElem(L,pos,&e);
- printf("第%d个元素的值为:%d\n",pos,e);
- break;
- case '6':
- printf("请输入你要查找的元素:");
- scanf("%d",&e);
- printf("元素所在位置为:%d\n",LocateElem(L,e));
- break;
- case '7':
- printf("你要删除第几个元素?");
- scanf("%d",&pos);
- ListDelete(&L,pos,&e);
- printf("删除后的线性表为:\n");
- ListTraverse(L);
- break;
- case '0':
- exit(0);
- }
- }
- return 0;
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。