1 #include<iostream.h>
2 #include<stdlib.h>
3 #define LIST_INIT_SIZE 100
4 #define OK 1
5 #define OVERFLOW -2
6 #define ERROR 0
7 typedef int Status;
8
9 typedef int ElemType;
10 typedef struct
11 {
12 ElemType *elem;
13 int length;
14 int listsize;
15 }SqList;
16
17 Status InitList_Sq(SqList &L)
18 {
19 //构造一个空的线性表
20 L.elem=new ElemType[LIST_INIT_SIZE];
21 if(!L.elem)
22 exit(OVERFLOW);
23 L.length=0;
24 L.listsize=LIST_INIT_SIZE;
25 return OK;
26 }//InitList_Sq
27
28 Status ListCreat_Sq(SqList &L,int n)
29 {
30 //创建顺序表
31 //i的合法范围为 1<=i<=L.length+1
32 ElemType x;
33 cout<<"input x(n)="<<endl;
34 for(int i=1;i<=n;++i)
35 {
36 cin>>x;
37 L.elem[i-1]=x;
38 ++L.length;
39 }
40 return OK;
41 }//ListCreat_Sq
42
43 int LocateElem_Sq(SqList L,ElemType e)
44 {
45 //在顺序表中查询第一个满足判定条件的数据元素
46 //若存在,则返回它的位序,否则返回0
47 ElemType *p;
48 int i;
49 i=1; //i的初值为第1元素的位序
50 p=L.elem; //p的初值为第1元素的存储位置
51 while(i<=L.length && (*p++!=e))
52 ++i;
53 if(i<=L.length)
54 return i;
55 else
56 return 0;
57 }//LocateElem_Sq
58
59 Status ListInsert_Sq(SqList &L,int i,ElemType e)
60 {
61 //在顺序表L的第i个元素之前插入新的元素e
62 //i的合法范围为1<=i<=L.length+1
63 ElemType *q,*p;
64 q=&(L.elem[i-1]); //q指示插入位置
65 if(i<1||i>=L.length+1)
66 return ERROR;
67 if(L.length>=L.listsize)
68 return OVERFLOW; //当前存储空间已满,不能插入
69 for(p=&(L.elem[L.length-1]);p>=q;--p)
70 *(p+1)=*p; //插入位置及之后的元素右移
71 *q=e; //插入e
72 ++L.length; //表长增1
73 return OK;
74 }//LisInsert_Sq
75
76 Status ListDelete_Sq(SqList &L,int i,ElemType &e)
77 {
78 ElemType *q,*p;
79 if((i<1)||(i>L.length))
80 return ERROR; //删除位置不合法
81 if(L.length==0)
82 return ERROR; //空表不能删除
83 p=&(L.elem[i-1]); //p为被删除元素的位置
84 e=*p; //被删除元素的值赋给e
85 q=L.elem+L.length-1; //表尾元素的位置
86 for(++p;p<=q;++p)
87 *(p-1)=*p; //被删除元素之后的元素左移
88 --L.length; //表长减1
89 return OK;
90 }//ListDelete_Sq
91
92 void visit_Sq(SqList L)
93 {
94 //访问顺序表的各个元素
95 for(int i=1;i<=L.length;++i)
96 {
97 cout<<L.elem[i-1]<<" ";
98 }
99 cout<<endl;
100 }//visit_Sq
101
102
103 void main()
104 {
105 SqList L;
106 ElemType x;
107 int i,n;
108 InitList_Sq(L);
109 cout<<"input sqList n=";
110 cin>>n;
111 ListCreat_Sq(L,n);
112 cout<<endl;
113 cout<<L.length<<endl;
114 visit_Sq(L);
115 cout<<"input insert i,x=";
116 cin>>i>>x;
117 if(ListInsert_Sq(L,i,x))
118 {
119 visit_Sq(L);
120 cout<<L.length<<endl;
121 }
122 else
123 cout<<"Insert i error!\n";
124 cout<<L.length<<endl;
125
126 cout<<"input delete i=";
127 cin>>i;
128 if(ListDelete_Sq(L,i,x))
129 {
130 visit_Sq(L);
131 cout<<L.length<<endl;
132 }
133 else
134 cout<<"delete i error!\n";
135
136 cout<<"input find x=";
137 cin>>x;
138 i=LocateElem_Sq(L,x);
139 if(i)
140 cout<<"L.elem["<<i-1<<"]="<<L.elem[i-1]<<endl;
141 else
142 cout<<"no find!";
143 }