線性表
作為線性結(jié)構(gòu)的一種榜苫,線性表是一種最簡單最常用的數(shù)據(jù)結(jié)構(gòu)
在c語言c99標(biāo)準(zhǔn)以前是沒有引用的所以按照數(shù)據(jù)結(jié)構(gòu)書中的方法編寫無限報(bào)錯(cuò)翎冲,最后換了一種思維方式所謂的數(shù)據(jù)結(jié)構(gòu),不是強(qiáng)調(diào)語言而是數(shù)據(jù)結(jié)構(gòu)抗悍,所以思維對了實(shí)現(xiàn)方法是可以多種多樣的。
#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);
}