还有5个月考研,代码还是得敲。
环境:Ubuntu10.10 ide:code::blocks
线性表的基本操作,还有合并,比较算法
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LIST_INCREASE 10
typedef char ElemType;
typedef struct
{
ElemType *elem;
int length;//Current Length of list
int listsize;//DataLength
}list;
//在表l中第i个位置插入x
void cutin(list *l,int i,ElemType x);
void initList(list *l);
ElemType del(list *l,int i);
void union1(list *A,list B);
void union2(list A,list B,list *C);
int main()
{
list Q;
list T;
list R;
initList(&Q);
initList(&T);
cutin(&Q,1,'g');
cutin(&Q,1,'c');
cutin(&T,1,'z');
cutin(&T,1,'x');
cutin(&T,1,'f');
cutin(&T,1,'a');
display(Q);
display(T);
printf("Union2 in turns:\n");
union2(Q,T,&R);
display(R);
printf("Union1:\n");
union1(&Q,T);
display(Q);
printf("Delet one element: %5c\n",del(&Q,2));
printf("Compare two list: %5d\n",compare(Q,T));
return 0;
}
void initList(list *l)
{
l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!l->elem)
{
printf("Over flow~\n");
exit(0);
}
l->listsize=LIST_INIT_SIZE;
l->length=0;
}
//在表l中第i个位置插入x
void cutin(list *l,int i,ElemType x)
{
ElemType *newbase;
ElemType *p,*q;
if(i<1||i>l->length+1)
{
printf("Wrong 'i'\n");
}
if(l->length>=l->listsize)//如果储存已满,调用realloc分配新内存
{
newbase=(ElemType *)realloc(l->elem,(l->listsize+LIST_INCREASE)*sizeof(ElemType));
if(!newbase)
{
printf("Over flow~\n");
exit(0);
}
l->elem=newbase;
l->listsize+=LIST_INCREASE;
}
p=&(l->elem[i-1]);
for(q=&(l->elem[l->length-1]);q>=p;q--)//p之后的元素往后移
{
*(q+1)=*q;
}
*p=x;
l->length++;
}
//删除表中第i个元素,返回删除值
ElemType del(list *l,int i)
{
ElemType *p,*q,e;
if(i<1||i>l->length+1)
{
printf("Wrong 'i'\n");
}
e=l->elem[i-1];
p=&(l->elem[i-1]);
for(q=&(l->elem[l->length]);q>=p;q--)//p之后的元素往后移
{
*(q-1)=*q;
}
l->length--;
return (e);
}
//在表中查找与e相等的元素
int locate(list *l,ElemType e)
{
ElemType *p=l->elem;
int i;
for(i=1;i<l->length;i++)
{
if(l->elem[i]==e)
return i;
}
if(i=l->length)
return 0;
}
void display(list l)
{
int i;
printf("The Element in the list:\n");
for(i=0;i<l.length;i++)
printf("%c",l.elem[i]);
printf("\n");
}
//归并A=A并B,算法1
void union1(list *A,list B)
{
int i;
ElemType j;
for(i=0;i<B.length;i++)
{
j=B.elem[i];
if(!locate(A,j))
{
cutin(A,A->length+1,j);
}
}
}
//归并算法2
void union2(list A,list B,list *C)
//A B C均按值非递减排列
{
ElemType *pa,*pb,*pc,*pa_last,*pb_last;
pa=A.elem;
pb=B.elem;
C->length=C->listsize=A.length+B.length;
C->elem=(ElemType *)malloc(C->length*sizeof(ElemType));
if(!C->elem)
{
printf("Over flow~\n");
exit(0);
}
pa_last=&(A.elem[A.length-1]);
pb_last=&(B.elem[B.length-1]);
pc= C->elem;
while(pa<pa_last&&pb<pb_last)
{
if(*pa<=*pb)
*pc++=*pa++;
else
*pc++=*pb++;
}
//搞定剩余部分
while(pa<=pa_last)
{
*pc++=*pa++;
}
while(pb<=pb_last)
{
*pc++=*pb++;
}
}
int compare(list la,list lb)//Compare two list
{
int i=0;
while(i<la.length&&i<lb.length)
{
if(la.elem[i]==lb.elem[i]) i++;
else if(la.elem[i]<lb.elem[i]) return -1;
else return 1;
}
}
分享到:
相关推荐
根据提供的文件信息,我们可以提炼出以下知识点: ...这些知识点涵盖了线性表的概念、实现、操作、应用以及考研真题分析等重要方面,对于备考408计算机专业基础综合考试的学生来说,是非常有价值的复习资料。
这份“杭州电子科技大学-计算机-考研-初试-复试-复习知识点总结.zip”压缩包文件,包含了历年的考研复习重点,旨在帮助考生们精准把握考试脉络,提升备考效率。 一、核心课程与基础理论 1. 数据结构:作为计算机...
### 数据结构考研复习精编知识点概述 #### 一、线性表 **1.1 线性表的定义和基本操作** - **定义**:线性表是一种基本且重要的数据结构,它由一系列元素组成,这些元素按照一定的顺序排列,并且每个元素除了第一...
1. **精读资料**: 仔细阅读《数据结构》考研复习精编资料中的每一部分,确保理解透彻。 2. **查漏补缺**: 遇到不懂的问题时,及时查阅相关书籍或与同学交流讨论。 3. **专注核心**: 考研大纲之外的内容不必过分关注...
数据结构笔记-考研复习 数据结构是计算机科学中的一门重要学科,研究如何组织、存储和使用数据。下面是考研复习笔记中的一些重要知识点: 1. 数据结构定义:数据结构是指数据元素之间的逻辑关系、数据的运算和存储...
线性表作为数据结构中最基础、最常用的一种结构,它的概念、定义以及基本操作是考研复习的重要知识点。 线性表是一种线性组织的数据结构,其中的元素按照特定顺序排列,每个元素都有一个前驱和后继,除了第一个元素...
### 东北石油大学820数据结构2021年考研专业课初试大纲解析 ...以上是对东北石油大学820数据结构2021年考研专业课初试大纲的详细解析,考生应根据大纲要求进行系统复习,掌握相关知识点,提高解题能力。
具体知识点包括线性表(顺序存储和链式存储)、栈、队列、数组、特殊矩阵的压缩存储、树与二叉树(如二叉排序树、平衡二叉树)、图(如最小生成树、最短路径)、查找(如B-树、哈希表)和内部排序(如快速排序、堆...
1. 线性表是零个或多个数据元素的有限序列,其特点是除了第一个和最后一个元素外,其它元素都有且仅有一个前驱和后继。 2. 线性表的实现方式包括顺序存储和链式存储。顺序存储使用数组来实现,链式存储通过指针来...
1. 数据结构部分:涵盖了线性表、栈、队列、树、图、排序和查找等基本概念,以及算法设计与分析,如时间复杂度和空间复杂度的计算。 2. 计算机组成原理:包括计算机系统的基本结构、运算器、控制器、存储器、输入/...
《计算机专业技术基础》考研复习大纲涵盖了计算机组成原理、数据结构、操作系统等多个核心领域,旨在全面考察考生对计算机基础知识的掌握程度。以下是各部分的主要知识点: **计算机组成原理** 1. 存储系统: - 主...
2015年数据结构联考复习指导 【作 者】王道论坛 组编 【出版发行】 北京:电子工业出版社 , 2014.05 【ISBN号】978-7-121-23048-6 【页 数】 311 【丛书名】王道考研系列 【主题词】数据结构-研究生-入学考试-自学...
### 考研计算机复习资料数据结构知识点解析 #### 一、基础知识概述 **考查目标:** 1. **理解数据结构的基本概念;** - 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。它包括数据的逻辑结构、...
对于考研复习来说,理解线性表的概念、特点以及各种操作是十分重要的。掌握线性表的顺序存储结构及其操作,有助于深入理解其他更复杂的数据结构,如栈、队列、树、图等。同时,线性表是许多算法的基础,如排序算法...
1. 数据结构与算法:这是考研基础中的核心部分,包括线性表、栈、队列、树、图、排序算法(如冒泡、选择、插入、快速、归并、堆排序等)、查找算法(二分查找、哈希查找)等。理解数据结构的逻辑特性及其实现方式,...