线性表
作为线性结构的一种,线性表是一种最简单最常用的数据结构
在c语言c99标准以前是没有引用的所以按照数据结构书中的方法编写无限报错,最后换了一种思维方式所谓的数据结构,不是强调语言而是数据结构,所以思维对了实现方法是可以多种多样的。
#include<stdio.h>
#include<stdlib.h>
#define MAX_LEN 10
enum bool {false,true};
typedef int Status;
typedef struct{
char data[MAX_LEN];
int index;
}List;
void InitList(List *,int,char []);
void ClearList(List *);
enum bool ListEmpty(List *);
void GetEmpty(List,int,char * );
int LocateElem(List,char);
void PriorElem(List,char,List *);
void NextElem(List,char,List *);
void ListInsert(List *,int,char);
void ShowList(List);
void InitList(List *l,int i,char c[]){
l->index = i;
for(int i=0;i<l->index;i++){
l->data[i]=c[i];
}
}
void CleartList(List *l){
int i =0;
while(!ListEmpty(l)){
l->data[i++] = '\0';
}
l->index = 0;
}
enum bool ListEmpty(List *l){
if(l->data[0]=='\0'&&l->index==0){
return true;
}
return false;
}
void GetEmpty(List l,int i,char *e){
if(ListEmpty(&l)){
printf("list is empty\n");
return;
}
e = &l.data[i];
printf("Get element : %c\n",l.data[i]);
}
void ShowList(List l){
printf("List elem:");
for(int i=0;i<l.index;i++){
printf("%c\t",l.data[i]);
}
printf("\n");
}
int LocateElem(List l,char e){
if(!ListEmpty(&l)){
for(int i=0; i < l.index;i++){
if(l.data[i]==e){
printf("The %c at %d\n",e,i);
return i;
}
}
return -1;
}
return -1;
}
void PriorElem(List l,char e,List *l1){
if(!ListEmpty(&l)&&(LocateElem(l,e)+1)){
int i = LocateElem(l,e);
for(int j = 0; j<i;j++){
l1->data[j]=l.data[j];
}
l1->index = i;
}
}
void NextElem(List l, char e, List *l1){
if(!ListEmpty(&l)&&(LocateElem(l,e)+1)){
int i = LocateElem(l,e);
for(int j = l.index; j>=i;j--){
l1->data[j]=l.data[j];
}
l1->index =l.index - i;
}
}
void ListInsert(List *l,int index,char e){
if(0<index&&index<l->index&&l->index<MAX_LEN-1){
for(int i = l->index; i>=index;i--){
l->data[i] = l->data[i-1];
}
l->data[index] = e;
l->index++;
}
}
int main(){
List l={};
int len = 5;
char e1;
char c[] = {'a','b','c','d','e'};
InitList(&l,len,c);
ShowList(l);
GetEmpty(l,2,&e1);
LocateElem(l,'c');
List l1 = {};
NextElem(l,'b',&l1);
ShowList(l1);
List l2 = {};
PriorElem(l,'d',&l2);
ShowList(l2);
ListInsert(&l,2,'j');
ShowList(l);
CleartList(&l);
ShowList(l);
}