1 #define MAXSIZE 100 //MAXSIZE 为线性表可能的最大长度
2 #include <stdio.h>
3 #include <iostream>
4 using namespace std;
5 typedef int ElemType;
6 typedef struct
7
8 {
9 ElemType data[MAXSIZE];
10 int length; // length为线性表的长度
11 } SqList;
12
13 SqList l; //线性表定义
14
15 void InitList(SqList &L)
16 //初始化操作,将线性表L置空
17 {
18 L.length = 0;
19 //g给顺序表长度初始化为0
20 }
21
22 void CreatSqlist(SqList &L,int n)
23 //建立一个顺序存储的线性表
24 {
25 printf("请输入节点");
26 int i;
27 for(i=0;i<n;i++)
28 scanf("%d",&L.data[i]);//读取元素
29 L.length=n;//表的长度就是元素的个数
30 fflush(stdin); //清除一个流
31 }
32
33 void Output(SqList &L) //输出顺序表L
34 {
35 int i;
36 for(i=0;i<L.length;i++)
37 printf("%5d",L.data[i]); //每个数据占5列
38 printf("\n");
39 }
40
41 int DELETE(SqList &L,int i)//删除一个元素
42 {
43 int j;
44
45 if(i<1||i>L.length)//删除位置错误
46 {printf("error");return 0;}
47 else
48 {
49 for(j=i;j<L.length;j++)
50 L.data[j-1]=L.data[j];
51 //依次把后一个元素往前移动一个位置
52 L.length--;//删除之后长度减1
53 }
54 return 1;
55 }
56
57 int INSERT(SqList &L,int x,int i)
58 //指定位置插入元素
59 {
60 int j;
61 if(L.length>=MAXSIZE-1)
62 {printf("over flow");return 1;}//上溢
63 else if((i<1)||(i>L.length+1))
64 {printf("error");return 1;}
65 else
66 {for(j=L.length;j>=i-1;j--)
67 L.data[j+1]=L.data[j];
68 //元素位置依次后移一位
69 L.data[i-1]=x;
70 //在第i个节点上插入x L.length=L.length+1;
71 //插入之后长度加1
72 }
73 return 0;
74 }
75
76 int GET(SqList &L,int i)//从表中获得一个元素
77 {
78 int m;
79 if((i<0)||(i>L.length))
80 {printf("overflow");return 1;}
81 else if((i>=1)&&(i<=L.length))
82 {
83 m=L.data[i-1];
84 } printf("%d ",m);
85 return 0;
86 }
87
88 int chazhao(SqList &L,int x)//从表中查找元素
89 {
90 int i,k;
91 printf("\n请输入你要查找的元素x=?");
92 scanf("%d",&x);
93 for(i=0;i<=(L.length+1);i++)
94 //从第一个元素开始查找,与X比较。
95 {
96 if(x==L.data[i])
97 {printf("要查找的元素%d 位于%d 上\n\n",x,i+1);
98 k=0;
99 break;
100 }
101 }
102 if(k!=0)
103 printf("%d 不在表中",x);
104 return 0;
105 }
106
107 int PUEGE(SqList &L)
108 // 删除线性表中重复出现的多余节点
109 {
110 int i=1,j,x,y;
111 while(i<L.length)
112 {x=L.data[i];
113 j=i+1;
114 /*for(j=i+1;j<L.length;j++)*/
115 while(j<L.length)
116 { y=L.data[j];
117 if(x==y)DELETE(l,j);
118 else j++;
119 }
120 i++;
121 }
122 return 0;
123 }
124
125 int main()
126 { int n,i,k,x;
127 InitList(l);
128
129 printf("请输入线性表的长度");
130 scanf("%d",&n);
131 CreatSqlist(l,n);
132 Output(l);
133
134 printf("请输入你要删除元素的位置=?");
135 scanf("%d",&k);
136 DELETE(l,k);
137 Output(l);
138
139 printf("请输入想要插入的数和位置x,i=?");
140 scanf("%d,%d",&x,&i);
141 INSERT(l,x,i);Output(l);
142
143 printf("请输入你要取的数在的节点位置");
144 scanf("%d",&i);
145 GET(l,i);
146 chazhao(l,x);
147 PUEGE(l);
148
149 return 0;
150
151 }