C语言数据结构线性表

线性表的类型定义

线性表是常用且最简单的一种数据结构。简言之一个线性表是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语言的数据结构其他知识我会继续更新的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值