Copyright (c) 2015,烟台大学计算机学院
All rights reserved,
文件名称:idea.cpp
作者:王阳
完成日期:2015年9月18日
list.h
01.#define MaxSize 50
02.typedef int ElemType;
03.typedef struct
04.{
05. ElemType data[MaxSize];
06. int length;
07.} SqList;
08.void CreateList(SqList *&L, ElemType a[], int n);//用数组创建线性表
09.void InitList(SqList *&L);//初始化线性表InitList(L)
10.void DestroyList(SqList *&L);//销毁线性表DestroyList(L)
11.bool ListEmpty(SqList *L);//判定是否为空表ListEmpty(L)
12.int ListLength(SqList *L);//求线性表的长度ListLength(L)
13.void DispList(SqList *L);//输出线性表DispList(L)
14.bool GetElem(SqList *L,int i,ElemType &e);//求某个数据元素值GetElem(L,i,e)
15.int LocateElem(SqList *L, ElemType e);//按元素值查找LocateElem(L,e)
16.bool ListInsert(SqList *&L,int i,ElemType e);//插入数据元素ListInsert(L,i,e)
17.bool ListDelete(SqList *&L,int i,ElemType &e);//删除数据元素ListDelete(L,i,e)#endif // LIST_H_INCLUDED
list.cpp
01.#include <stdio.h>
02.#include <malloc.h>
03.#include "list.h"
04.
05.//用数组创建线性表
06.void CreateList(SqList *&L, ElemType a[], int n)
07.{
08. int i;
09. L=(SqList *)malloc(sizeof(SqList));
10. for (i=0; i<n; i++)
11. L->data[i]=a[i];
12. L->length=n;
13.}
14.
15.//初始化线性表InitList(L)
16.void InitList(SqList *&L) //引用型指针
17.{
18. L=(SqList *)malloc(sizeof(SqList));
19. //分配存放线性表的空间
20. L->length=0;
21.}
22.
23.//销毁线性表DestroyList(L)
24.void DestroyList(SqList *&L)
25.{
26. free(L);
27.}
28.
29.//判定是否为空表ListEmpty(L)
30.bool ListEmpty(SqList *L)
31.{
32. return(L->length==0);
33.}
34.
35.//求线性表的长度ListLength(L)
36.int ListLength(SqList *L)
37.{
38. return(L->length);
39.}
40.
41.//输出线性表DispList(L)
42.void DispList(SqList *L)
43.{
44. int i;
45. if (ListEmpty(L)) return;
46. for (i=0; i<L->length; i++)
47. printf("%d ",L->data[i]);
48. printf("\n");
49.}
50.
51.//求某个数据元素值GetElem(L,i,e)
52.bool GetElem(SqList *L,int i,ElemType &e)
53.{
54. if (i<1 || i>L->length) return false;
55. e=L->data[i-1];
56. return true;
57.}
58.
59.//按元素值查找LocateElem(L,e)
60.int LocateElem(SqList *L, ElemType e)
61.{
62. int i=0;
63. while (i<L->length && L->data[i]!=e) i++;
64. if (i>=L->length) return 0;
65. else return i+1;
66.}
67.
68.//插入数据元素ListInsert(L,i,e)
69.bool ListInsert(SqList *&L,int i,ElemType e)
70.{
71. int j;
72. if (i<1 || i>L->length+1)
73. return false; //参数错误时返回false
74. i--; //将顺序表逻辑序号转化为物理序号
75. for (j=L->length; j>i; j--) //将data[i..n]元素后移一个位置
76. L->data[j]=L->data[j-1];
77. L->data[i]=e; //插入元素e
78. L->length++; //顺序表长度增1
79. return true; //成功插入返回true
80.}
81.
82.//删除数据元素ListDelete(L,i,e)
83.bool ListDelete(SqList *&L,int i,ElemType &e)
84.{
85. int j;
86. if (i<1 || i>L->length) //参数错误时返回false
87. return false;
88. i--; //将顺序表逻辑序号转化为物理序号
89. e=L->data[i];
90. for (j=i; j<L->length-1; j++) //将data[i..n-1]元素前移
91. L->data[j]=L->data[j+1];
92. L->length--; //顺序表长度减1
93. return true; //成功删除返回true
94.}
main.cpp
01.#include "list.h"
02.#include <stdio.h>
03.
04.//删除线性表中,元素值在x到y之间的元素
05.void delx2y(SqList *&L, ElemType x, ElemType y)
06.{
07. int k=0,i; //k记录非x的元素个数
08. ElemType t;
09. if(x>y)
10. {
11. t=x;
12. x=y;
13. y=t;
14. }
15. for (i=0; i<L->length; i++)
16. if (L->data[i]<x || L->data[i]>y ) //复制不在[x, y]之间的元素
17. {
18. L->data[k]=L->data[i];
19. k++;
20. }
21. L->length=k;
22.}
23.
24.//用main写测试代码
25.int main()
26.{
27. SqList *sq;
28. ElemType a[10]= {5,8,7,0,2,4,9,6,7,3};
29. CreateList(sq, a, 10);
30. printf("删除前 ");
31. DispList(sq);
32.
33. delx2y(sq, 4, 7);
34.
35. printf("删除后 ");
36. DispList(sq);
37. return 0;
38.}