#include <iostream>
#define MaxSize 50
typedef int ElemType;
struct SqList {
ElemType data[MaxSize];
int length;
};
void printList(SqList L) {
for (int i = 0; i < L.length; i++) {
std::cout << L.data[i] << " ";
}
std::cout << std::endl;
}
void removeDuplicate(SqList &L) {
if (L.length <= 1) { // 顺序表为空或只有一个元素
return;
}
int i = 0; // i 是不重复元素的当前位置
for (int j = 1; j < L.length; j++) {
if (L.data[i] != L.data[j]) { // 如果遇到不同元素
L.data[++i] = L.data[j]; // 将不同元素放入不重复元素序列中
}
}
L.length = i + 1; // 更新顺序表长度
}
int main() {
SqList L = {{0, 0, 2, 4, 4, 4, 7, 7}, 8};
std::cout << "原始顺序表:";
printList(L);
removeDuplicate(L);
std::cout << "去重后的顺序表:";
printList(L);
return 0;
}
int main()
{
SqList *L;
ElemType e;
printf("顺序表的基本运算如下:\n");
printf("(1)创建顺序表L,依次插入a,b,c,d,e元素\n");
ElemType a[] = {'a', 'b', 'c', 'd', 'e'};
CreateList(L, a, 5);
printf("(2)输出顺序表L:");
DispList(L);
printf("(3)顺序表L长度:%d\n", ListLength(L));
printf("(4)顺序表L为%s\n", (ListEmpty(L)?"空":"非空"));
GetElem(L, 3, e);
printf("(5)顺序表L的第3个元素:%c\n", e);
printf("(6)元素a的位置:%d\n", LocateElem(L, 'a'));
printf("(7)在第4个元素位置上插入f元素\n");
ListInsert(L, 4, 'f');
printf("(8)输出顺序表L:");
DispList(L);
printf("(9)删除L的第3个元素\n");
ListDelete(L, 3, e);
printf("(10)输出顺序表L:");
DispList(L);
printf("(11)释放顺序表L\n");
DestroyList(L);
return 1;
}
#include<stdio.h>
#include<malloc.h>
#define MaxSize 50
typedef char ElemType;
typedef struct
{
ElemType data[MaxSize];
int length;
}SqList;
void CreateList(SqList *&L,ElemType a[ ],int n)
{
L=(SqList *)malloc(sizeof(SqList));
for (int i=0;i<n;i++)
L-> data[i]=a[i];
L-> length= n;
}
void InitList(SqList *&L)
{
L=(SqList * )malloc(sizeof(SqList));
L->length=0;
}
void DestroyList(SqList *&L)
{
free(L);
}
bool ListEmpty(SqList * L)
{
return(L -> length== 0);
}
int ListLength(SqList * L)
{
return(L->length);
}
void DispList(SqList * L)
{
for (int i= 0;i<L->length;i++)
printf("%c",L->data[i]);
printf("\n");
}
bool GetElem(SqList * L, int i,ElemType &e)
{if(i<1|| i>L->length)
return false;
e=L->data[i-1];
return true;
}
int LocateElem(SqList * L, ElemType e)
{
int i=0;
while (i<L->length && L->data[i]!= e)
i++;
if (i>=L->length)
return 0;
else
return i+1;
}
bool ListInsert(SqList *&L,int i,ElemType e)
{
int j;
if (i<1|| i>L->length+1)
return false;
i--;
for (j=L->length;j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]= e;
L-> length++;
return true;
}
bool ListDelete(SqList *&L,int i,ElemType &e)
{
int j;
if(i<1 || i>L->length)
return false;
i--;
e=L->data[i];
for (j=i;j<L->length-1;j++)
L->data[j]=L->data[j+ 1];
L-> length--;
return true;
}
int main()
{
SqList *L;
ElemType e;
printf("顺序表的基本运算如下:\n");
printf(" (1)初始化顺序表L\n");
InitList(L);
printf(" (2)依次插人a,b,c,d,e元素\n");
ListInsert(L,1,'a');
ListInsert(L,2,'b');
ListInsert(L,3,'c');
ListInsert(L,4,'d');
ListInsert(L,5,'e');
printf(" (3)输出顺序表L:");DispList(L);
printf(" (4)顺序表L长度:%d\n",ListLength(L));
printf(" (5)顺序表L为%s\n",(ListEmpty(L)?"空":"非空"));
GetElem(L,3,e);
printf(" (6)顺序表L的第3个元素:%c\n",e);
printf(" (7)元素a的位置:%d\n",LocateElem(L,'a'));
printf("(8)在第4个元素位置上插人f元素\n");
ListInsert(L,4,'f');
printf(" (9)输出顺序表L:");
DispList(L);
printf("(10)删除L的第3个元素\n");
ListDelete(L,3,e);
printf("(11)输出顺序表L:");DispList(L);
printf(" (12)释放顺序表L\n");
DestroyList(L);
CreateList(L,e,5);
printf("2.输出创建顺序表:");DispList(L);
return 1;