静态(结构体 . )
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int length;
}sqlist;
void Initlist(sqlist &L)
{
for(int i=0;i<maxsize;i++)
L.data[i]=' ';
L.length=0;
}
void free()
{
}
bool insertlist(sqlist &L,int point,char x)
{
if(point<1||point>L.length+1)return false;
if(L.length>=maxsize)return false;
for(int i=L.length;i>=point;i--)
{
L.data[i]=L.data[i-1];
}
L.data[point-1]=x;
L.length++;
}
bool deletlist(sqlist &L,int point,char &e)
{
if(point<1||point>L.length)return false;
e=L.data[point-1];
for(int i=point;i<=L.length-1;i++)
{
L.data[i]=L.data[i+1];
}
L.length--;
}
void getelem(sqlist L,int point,char &e)
{
e=L.data[point-1];
}
int getpoint(sqlist L,char x)
{
for(int i=0;i<L.length;i++)
{
if(L.data[i]==x)return i+1;
}
return -1;
}
int getlength(sqlist L)
{
return L.length;
}
bool empty(sqlist L)
{
if(L.length==0)return true;
return false;
}
void printflist(sqlist L)
{
for(int i=0;i<=L.length-1;i++)
{
if(i==L.length-1)printf("%c\n",L.data[i]);
else printf("%c ",L.data[i]);
}
}
void insert(sqlist &L,char x)
{
L.data[L.length++]=x;
}
int main()
{
sqlist L;
Initlist(L);
printf("=================================依次采用尾插法插入 a、b、c、d、e 元素==================================================\n");
insert(L,'a');
insert(L,'b');
insert(L,'c');
insert(L,'d');
insert(L,'e');
printflist(L);
printf("=================================输出顺序表 L 的长度=====================================================\n");
printf("%d\n",getlength(L));
printf("==================================判断顺序表 L 是否为空==================================================\n");
if(empty(L))printf("空\n");
else printf("不空\n");
printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");
char e;
getelem(L,3,e);
printf("%c\n",e);
printf("==================================输出元素 a 的位置========================================================\n");
if(getpoint(L,'a')==-1)printf("不存在该元素\n");
else printf("%d\n",getpoint(L,'a'));
printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
insertlist(L,4,'f');
printflist(L);
printf("===================================删除 L 的第 3 个元素====================================================\n");
deletlist(L,3,e);
printflist(L);
printf("===================================因为实现不同,那么该操作free()可以没有 ========================================\n");
}
静态(指针->)
#include<stdio.h>
#include<stdlib.h>
#define maxsize 100
typedef struct
{
char data[maxsize];
int length;
}node,*list;
void Initlist(list &L)
{
L=(node*)malloc(sizeof(node));
L->length=0;
}
void DestroyList(list L)
{
free(L);
}
bool insertlist(list &L,int point,char x)
{
if(point<0||point>L->length+1)return false;
if(L->length >=maxsize)return false;
for(int i=L->length;i>=point;i-- )
L->data[i]=L->data[i-1];
L->data [point-1]=x;
L->length++;
}
bool deletlist(list &L,int point,char &e)
{
if(point<1||point>L->length)return false;
e=L->data[point-1];
for(int i=point;i<L->length;i++)
{
L->data[i-1]=L->data[i];
}
L->length--;
return true;
}
void getelem(list L,int point,char &e)
{
e=L->data[point-1];
}
int getpoint(list L,char x)
{
for(int i=0;i<L->length;i++)
{
if(L->data[i]==x)return i+1;
}
return -1;
}
int getlength(list L)
{
return L->length;
}
bool empty(list L)
{
if(L->length==0)return true;
return false;
}
void insert(list &L,char x)
{
L->data[L->length++]=x;
}
void printlist(list &L)
{
for(int i=0;i<L->length;i++)
{
printf("%c ",L->data[i]);
}
printf("\n");
}
int main()
{
list L;
Initlist(L);
printf("=================================依次采用尾插法插入 a、b、c、d、e 元素==================================================\n");
insert(L,'a');
insert(L,'b');
insert(L,'c');
insert(L,'d');
insert(L,'e');
printlist(L);
printf("=================================输出顺序表 L 的长度=====================================================\n");
printf("%d\n",getlength(L));
printf("==================================判断顺序表 L 是否为空==================================================\n");
if(empty(L))printf("空\n");
else printf("不空\n");
printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");
char e;
getelem(L,3,e);
printf("%c\n",e);
printf("==================================输出元素 a 的位置========================================================\n");
if(getpoint(L,'a')==-1)printf("不存在该元素\n");
else printf("%d\n",getpoint(L,'a'));
printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
insertlist(L,4,'f');
printlist(L);
printf("===================================删除 L 的第 3 个元素====================================================\n");
deletlist(L,3,e);
printlist(L);
printf("====================================操作free()========================================\n");
DestroyList(L);
}
动态(结构体 . )
#include<stdio.h>
#include<stdlib.h>
#define IncreaseSize 10
#define InitSize 100
typedef struct
{
char* data;
int MaxSize;
int length;
}SeqList;
bool InitList(SeqList &L)
{
L.data = (char* )malloc(InitSize*sizeof(char));
if(L.data==NULL)return false;
L.length=0;
L.MaxSize=InitSize;
return true;
}
void DestroyList(SeqList L)
{
}
bool ListInsert(SeqList &L,int i,char e)
{
if(i<1||i>L.length+1)return false;
if(L.length >= L.MaxSize)
{
char* newbase=(char*)realloc(L.data,(L.length+IncreaseSize)*sizeof(char));
if(newbase==NULL)return false;
L.data=newbase;
L.MaxSize+=IncreaseSize;
}
for(int j=L.length ;j>=i;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length ++;
return true;
}
bool ListDelete(SeqList &L,int i,char &e)
{
if(i<1||i>L.length)return false;
e=L.data[i-1];
for(int j=i ;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length --;
return true;
}
int getlength(SeqList L)
{
return L.length;
}
bool empty(SeqList L)
{
if(L.length==0)return true;
return false;
}
int get(SeqList L,int i)
{
return L.data [i-1];
}
int LocateElem(SeqList L,char e)
{
for(int i=0;i<L.length;i++)
if(L.data[i]==e)return i+1;
return 0;
}
void printlist(SeqList &L)
{
for(int i=0;i<L.length;i++)
{
printf("%c ",L.data[i]);
}
printf("\n");
}
int main()
{
SeqList L;
InitList(L);
printf("=================================依次采用尾插法插入 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');
printlist(L);
printf("=================================输出顺序表 L 的长度=====================================================\n");
printf("%d\n",L.length);
printf("==================================判断顺序表 L 是否为空==================================================\n");
if(empty(L))printf("空\n");
else printf("不空\n");
printf("==================================输出顺序表 L 的第 3 个元素==============================================\n");
printf("%c\n",L.data[2]);
printf("==================================输出元素 a 的位置========================================================\n");
printf("%d\n", LocateElem(L,'a'));
printf("===================================在第 4 个元素位置上插入 f 元素==========================================\n");
ListInsert(L,4,'f');
printlist(L);
printf("===================================删除 L 的第 3 个元素====================================================\n");
char e;
ListDelete(L,3,e);
printlist(L);
printf("===================================因为实现不同,那么该操作free()可以没有 ========================================\n");
}