线性表的类型定义
线性表是常用且最简单的一种数据结构。简言之一个线性表是n个数据元素的有限序列。至于每个数据元素的具体含义,在不同的情况下各不相同,它可以是一个数一个符号也可以是一页书,甚至是其他更复杂的信息。
线性表的定义
typedef struct SeqList{
char* array; //动态从堆上申请
int capacity; //容量
int size; //有效数据的个数 尾插时,可用位置的下标
}SeqList;
其中的char类型类似于结构体,可以因题而异,还可以增加其他类型的定义等。
线性表一般的为顺序储存结构,还会有链式储存结构,如下:
struct array
{
int number;
};
typedef struct list{ //链表用来存储从文件中都出来的数据
array arrays;
struct list *next;
}set, *last;
线性表的创建
该线性表的创建是以字符串的输入来创建。
void setSepList(SeqList *Listname){//输入并整理滤去其他字符,并赋值给最终顺序表
//大小可以自己确定30可以自己进行更改。
Listname->array = (char*)malloc(sizeof(30));//申请空间大小
Listname->capacity = 30;
char s[100] , temp[100];
int por[200];
scanf("%s", &s);
int i = 0 , x = 0;
i = 0;
for(int l = 'a'; l <='z';l++){//排除第二次进入第一次进入改变值的干扰。
por[l] == 0;
}
i = 0;
while(s[i]!=NULL){//遍历数组
if(s[i] >='a' && s[i] <='z' && por[s[i]] != 1){//排除a-z以外的字符并排除多次出现的字符。
temp[x] = s[i];
por[s[i]] = 1;
x++;
}
i++;
}
i = 0;
while(temp[i]!=NULL){//将放置在临时字符组的字符转移到目标顺序表中
Listname->array[i] = temp[i];
i++;
}
//Listname->array = temp;
Listname->size = i;
printf("整理后数组中的元素为:[%c", Listname->array[0]);//输出
for(int f = 1; f < x; f++ ){
printf(",%c",Listname->array[f]);
}
printf("]\n");
}
该串代码仅取26位英文字母,其他的数字以及字符均被排除。请谨慎取用,排除是由C语言中的ASSCII码的大小来排除,在其他的地方是不适用的。
线性链表的创建
该线性链表的创建是用头插法来建立的,除此之外还有尾插法此处不进行过多介绍。
last createheadlist(){//头插法建立链表
char temp[100], temp1[100];
int x = 0, i = 0, nu;
printf("请输入你想创建的链表中元素的个数。\n");
scanf("%d", &nu);
last n , p, head;
head = (last)malloc(sizeof(set));
head->next = NULL;
n = (last)malloc(sizeof(set));
n->next = head;
i = 0;
printf("请按照非递增输入\n");
while(i < nu){
int temp;
printf("请输入第%d个元素\n",i+1);
scanf("%d", &temp);
last m = (last)malloc(sizeof(set));
m->arrays.number = temp;
m->next = n;
n = m;
i++;
}
head->next = n;
p = head->next;
while(p->next->next!=head){
p = p->next;
}
p->next = head;
return head;
}
线性链表节点的删除
线性链表节点的删除需要节点的位置,所以需要两个参数才能删除线性链表的节点。
last deletelist(last head, int number){//删除该位置节点
last p;
int i = 0;
p = head;
while(i < number){
p = p->next;
i++;
}
p->next = p->next->next;
return head;
}
线性表还有许多其他的操作以及其他例子,这里我的学识有限就不多做介绍了。
如果大家有其他疑问欢迎提出来,C语言的数据结构其他知识我会继续更新的。