栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

我的第一篇博客

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我的第一篇博客

C语言数据结构-线性表的操作

线性表的类型定义:线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的

顺序表的定义
定义顺序表
  typedef int datatype;
typedef struct {
	    int last;
	    Datatype date[maxsize];
}sequenlist;
1线性表的顺序表示和实现 1)顺序线性表的创建、打印和定位计数。
   
void creatlist(sequenlist* L) {
	 int i, n;
	 int tmp;
	 printf("请输入数据个数:n");
	 scanf("%d", &n);
	 for (i = 0; i < n; i++) {
		printf("date[%d]=", i);
		scanf("%d", &tmp);
		L->date[i] = tmp;
	 }
	 L->last = n - 1;
	 printf("n");
}
void printout(sequenlist* L) {
	int i;
	for (i = 0; i <= L->last; i++) {
		printf("data[%d]=", i);
		printf("%dn", L->date[i]);
	}
}
int  LocList(sequenlist* L,int i) {
	  if (L == NULL) {
		 printf("线性表为空");
		 return -1;
	 }
	 for (int j = 0; j <= L->last; j++) {
		 if (L->date[j] == i) {
			 printf("存在该数,该数在第%d个位置n", j+1);
		 }
	 }
	 return 0;
}
2)顺序线性表插入/删除。(A)指定插入删除位置;(B)插入删除后数据保持有序。

/

/指定位置插入并保持有序
void insert(sequenlist* L,int x,int i)
{
​	if (L == NULL && x > L->last) {
​		printf("插入失败请重试");
​		return;
​	}
​	int j;
​	for (int j = L->last; j >= i; j--) {
​		L->date[j + 1] = L->date[j];
​	}
​	L->date[i] = x;
​	L->last++;
​	//插入排序
​	int temp;
​	for (i = 1; i <= L->last; i++)
​	{
​		temp = L->date[i];
​		j = i - 1;
​		while (j >= 0 && temp < L->date[j])  //在这里改顺序 !!!
​		{
​			L->date[j+1] = L->date[j];
​			j--;
​		}
​		L->date[j + 1] = temp;
​	}
}
//指定位置删除并保持有序
void DeletList(sequenlist* L, int i) {
​	if (L == NULL && i > L->last) {
​		printf("删除失败请重试");
​		return;
​	}
​	for (int j =i; j <=L->last; j++) {
​		L->date[j ] = L->date[j+1];
​	}
​	L->last--;
​	//插入排序
​	int j;
​	int temp;
​	for (i = 1; i <= L->last; i++)
​	{
​		temp = L->date[i];
​		j = i - 1;
​		while (j >= 0 && temp < L->date[j])  //在这里改顺序 !!!
​		{
​			L->date[j + 1] = L->date[j];
​			j--;
​		}
​		L->date[j + 1] = temp;
​	}
}
3)顺序线性表就地逆序。
//顺序表就地逆序
void ReverList(sequenlist* L) {
​	if (L == NULL) {
​		return;
​	}
​	int left = 0;//左
​	int right = L->last;//右
​	while (left <= right) {
​		//交换
​		 if (L->date[left] != L->date[right]) {
​			L->date[left] = L->date[left] ^ L->date[right];
​			L->date[right] = L->date[left] ^ L->date[right];
​			L->date[left] = L->date[left] ^ L->date[right];
​		}
​		left++;
​		right--;
​	}
}
4)判断两顺序表是否相同
//判断两线性表是否相同
void JudgeSameList(sequenlist* L1, sequenlist* L2) {
​	 if ( L2 == NULL && L1 == NULL) {
​		 printf("线性表为空请重试");
​		 return;
​	 }
​	 else if (L1->last == L2->last) {
​		 int i = 0;
​		 while (i <= L1->last) {
​			 if (L1->date[i] != L2->date[i]) {
​				 printf("两线性表不相同");
​				 return;
​			 }
​			 i++;
​		 }
​		 printf("两线性表相同");
​		 return;
​	 }
​	 printf("两线性表不相同");
}
5}合并两个顺序表并对数据进行排序
void MergeList(sequenlist* L1, sequenlist* L2) {
​	if (L1 == NULL&&L2!=NULL) {
​		printf("合并失败");
​		return ;
​	}
​	else if (L2 == NULL && L1 != NULL) {
​		printf("合并失败");
​		return ;
​	}
​	int j = 0;
​	while (j <= L2->last) {
​		L1->date[L1->last+++1] = L2->date[j++];
​	}
​	//插入排序
​	int temp;
​	int i;
​	for (i = 1; i <= L1->last; i++)
​	{
​		temp = L1->date[i];
​		j = i - 1;
​		while (j >= 0 && temp < L1->date[j])  //在这里改顺序 !!!
​		{
​			L1->date[j + 1] = L1->date[j];
​			j--;
​		}
​		L1->date[j + 1] = temp;
​	}
}

写博客的第一天记录自己的学习(慢慢更新)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/302332.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号