#include<stdio.h>
#define list_init_size 100
typedef struct{
int data[list_init_size];
int length;
}Seqlist;
void creat(Seqlist &L);
void show(Seqlist L);
void insert(Seqlist &L,int position,int e);
void sort(Seqlist &L);
int main(){
Seqlist L;
L.length=0;
creat(L);
show(L);
insert(L,4,30);
sort(L);
show(L);
return 0;
}
void creat(Seqlist &L){
int size;
printf("请输入要创建的元素的个数:\t");
scanf("%d",&size);
while(size<=0||size>100){
printf("输入非法,请重新输入:\t");
scanf("%d",&size);
}
for(int i=0;i<size;i++){
printf("请输入第%d个元素\t",i+1);
scanf("%d",&L.data[i]);
L.length++;
}
}
void show(Seqlist L){
int i;
printf("线性表中的元素为:\n");
for(i=0;i<L.length;i++)
printf("%d\t",L.data[i]);
printf("\n");
}
void insert(Seqlist &L,int position,int e){
int pos=position;
while(pos<=0||pos>L.length+1){
printf("插入数据位置不合法,考虑重新输入位置:\t");
scanf("%d",&pos);
}
if(pos>=1&&pos<=L.length+1){
for(int i=L.length-1;i>=pos-1;i--){
L.data[i+1]=L.data[i];
}
L.data[pos-1]=e;
L.length++;
}
}
void sort(Seqlist &L){
for(int i=0;i<L.length-1;i++){
for(int j=L.length-2;j>=i;j--){
if(L.data[j]>=L.data[j+1]){
int tem=L.data[j];
L.data[j]=L.data[j+1];
L.data[j+1]=tem;
}
}
}
}
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 100
#define LIST_INCREASMENT 10
#define FALSE 0
#define TRUE 1
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *base;
int length;
int listSize;
} SqList;
void initList(SqList *L){
L->listSize = LIST_INIT_SIZE;
L->base = (ElemType *)malloc(L->listSize * sizeof(ElemType));
L->length = 0;
}
bool listEmpty(SqList *L){
return L->length == 0;
}
int listLength(SqList *L){
if(L->length >= 0 && L->length <= L->listSize){
return L->length;
} else{
return -1;
}
}
Status listInsert(SqList *L, int i, ElemType e){
int k;
if(L->length == L->listSize){
printf("线性表已满,不能插入");
return ERROR;
}
if(i<1 || i>L->length + 1){
printf("插入的位置不正确");
return ERROR;
}
if(i <= L->length){
for(k=L->length - 1; k>i - 1; k--){
L->base[k + 1] = L->base[k];
}
}
L->base[i - 1] = e;
L->length = L->length + 1;
return OK;
}
Status listDelete(SqList *L, int i, ElemType *e){
int k;
if(L->length == 0){
return ERROR;
}
if(i<1 || i>L->length){
return ERROR;
}
*e = L->base[i - 1];
if(i < L->length){
for(k=i; k<L->length; k++){
L->base[k - 1] = L->base[k];
}
}
L->length = L->length - 1;
return OK;
}
ElemType getElem(SqList *L, int i){
if(i<1 || i>L->length){
return ERROR;
}
return L->base[i - 1];
}
ElemType priorElem(SqList *L, int i){
if(i<1 || i>L->length){
return ERROR;
}
if(i != 1){
return L->base[i-2];
} else {
printf("线性表的第一个元素没有前驱,操作错误!");
return ERROR;
}
}
ElemType nextElem(SqList *L, int i){
if(i<1 || i>L->length){
return ERROR;
}
if(i != L->length){
return L->base[i];
} else {
printf("线性表的最后一个元素没有后继,操作错误!");
return ERROR;
}
}
bool clearList(SqList *L){
if(L->length>0 && L->length<L->listSize){
L->length = 0;
return OK;
} else{
return ERROR;
}
}
Status destroyList(SqList *L){
clearList(L);
L->listSize = 0;
free(L->base);
if(L->base == NULL && L->length == 0 && L->listSize == 0){
return TRUE;
} else{
return FALSE;
}
}
void listTraverse(SqList *L)
{
ElemType *p;
int i;
p = L->base;
for(i = 1; i <= L->length; i++)
{
printf("%d ", *(L->base + i - 1));
}
printf("\n\n");
}
int LocateElem(SqList *L, int e)
{
ElemType *p;
int i = 1;
p = L->base;
while(i <= L->length && *(p++) != e){
++i;
}
if(i <= L->length)
{
return i;
}
else
{
return 0;
}
}
int main()
{
ElemType e;
char ch = NULL;
SqList L;
initList(&L);
printf("创建线性表后\n线性表的当前长度:%d", L.length);
printf("\n线性表的总长度:%d", L.listSize);
if(listEmpty(&L)){
printf("\n此时线性表为空");
} else {
printf("\n此时线性表不为空");
}
if(listInsert(&L, 1, 500)){
printf("\n第一个元素的值:%d", getElem(&L, 1));
}
printf("\n线性表的当前长度:%d", L.length);
if(listInsert(&L, 2, 1000)){
printf("\n第二个元素的值:%d", getElem(&L, 2));
}
printf("\n线性表的当前长度:%d", L.length);
if(listInsert(&L, 3, 2000)){
printf("\n第三个元素的值:%d", getElem(&L, 3));
}
printf("\n线性表的当前长度:%d\n", L.length);
listTraverse(&L);
printf("\n第二个元素的前驱是:%d", priorElem(&L, 2));
printf("\n第二个元素的后继是:%d", nextElem(&L, 2));
if(listDelete(&L, 1, &e)){
printf("\n被删除的元素的值:%d", e);
}
printf("\n线性表的当前长度:%d\n", L.length);
listTraverse(&L);
scanf("%c", &ch);
return 0;
}