建立一个含26个英文字母的数据元素的顺序表并输出该表中各元素的值及查找、插入、删除及顺序表的长度等操作

要求:分别用顺序表和链表实现。

#include<stdio.h>

#include<stdlib.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define OVERFLOW -1

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef char ElemType;

typedef int Status;

typedef struct{

ElemType *elem;//存储空间基址

int length;//当前长度

int listsize;//当前分配的存储容量

}Sqlist;

Status InitList_Sq(Sqlist *L) {

int i;

L->elem = (ElemType *) malloc (LIST_INIT_SIZE * sizeof(ElemType) );

if(!L->elem)exit(OVERFLOW);//存储分配失败

for(i=0;i<26;i++)

L->elem[i]='a'+i;

L->length=26;

L->listsize=LIST_INIT_SIZE;

return OK;

}

Status ListInsert_Sq ( Sqlist *L, int i, ElemType e ){

//在顺序线性表L中第i个位置之前插入新的元素e,

//i的合法值为1<=i<=ListLength_Sq(L)+1

ElemType *newbase, *p, *q;

if(i<1 ||(i>L->length)) return ERROR;

if(L->length >= L->listsize) {//当前存储空间已满,增加分配

newbase = (ElemType *)realloc(L->elem, (L->listsize+LISTINCREMENT)*sizeof(ElemType) );

if(!newbase) exit(OVERFLOW);//存储分配事变

L->elem = newbase;//新基址

L->listsize += LISTINCREMENT;//增加存储容量

}

q = &(L->elem[i-1]);//q为插入位置

for( p = &(L->elem[L->length-1]); p >= q; --p)

*(p+1)=*p;//插入位置及之后的元素右移

*q = e;//插入e

++L->length;//表长增1

return OK;

}

Status ListDelete_Sq(Sqlist *L, int i, ElemType e){

//在顺序表L中删除第i个元素。

//i的合法值为1<=i<=ListLength_Sq(L)+1}

ElemType *p, *q;

if((i<1)||(i>L->length))return ERROR;

p=&(L->elem[i-1]);

e=*p;

q=L->elem+L->length-1;

for(++p;p<=q;++p)*(p-1)=*p;

--L->length;

return OK;

}

Status ListDisplay(Sqlist A){//显示顺序表元素

int i=0;

printf("字母表为:");

while(i < A.length) {

printf("%5c", A.elem[i]);

i++;

}

printf("\n");

return 0;
}

void main( ) {

char e;

int i,a;

Sqlist A;

InitList_Sq(&A);

ListDisplay(A);

printf("请输入要插入的字母和位置:\n");

scanf("%c,%d", &e,&i);

getchar();

ListInsert_Sq(&A,i,e);

ListDisplay(A);

printf("请输入要删除的字母和位置:\n");

scanf("%c,%d", &e,&i);

ListDelete_Sq(&A,i,e);

ListDisplay(A);

}
温馨提示:答案为网友推荐,仅供参考