C语言线性表——分别用顺序表和单链表实现A∩B,详见补充

作者&投稿:东方庙 (若有异议请与网页底部的电邮联系)
C语言中的线性表、顺序表和链表到底是什么关系?~

这个要看数据结构的书籍。
线性表是一类ADT,指的是除了头尾,每一项都有前驱后继项。
顺序表使用数组实现这个;链表使用指针实现这个,分单链表(每一项只有指向下一个的指针)、双链表(每一项有指向上一个下一个两个指针)。
===========================
线性表定义了一种数据结构,从逻辑上定义了各项之间的关系。
顺序表和链表通过两种不同的存储方式实现了这种数据结构。
顺序表使用数组实现,在内存中是连续的,数组放满时,需要手动重新分配或者干脆报错。
链表使用指针实现,在内存中可以不连续,而且长度只受内存大小限制。

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。线性表采用顺序存储的方式存储就称之为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,链表比较方便插入和删除操作。

#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int value;
ListNode *next;
};
typedef ListNode *pListNode;
struct List
{
pListNode Head;
pListNode Tail;
};
typedef List *pList;
void InitList(pList list);
void AddNode(pList list,int value);
pList SameNode(pList list1,pList list2);
void DeleteList(pList list);
void PrintList(pList list);
int main()
{
pList list1=(pList)malloc(sizeof(List));
pList list2=(pList)malloc(sizeof(List));
pList list3=NULL;
InitList(list1);
InitList(list2);
AddNode(list1,1);
AddNode(list1,2);
AddNode(list1,3);
AddNode(list1,4);
AddNode(list1,5);
AddNode(list1,6);
AddNode(list1,7);

AddNode(list2,1);
AddNode(list2,3);
AddNode(list2,4);
AddNode(list2,5);
AddNode(list2,7);
AddNode(list2,8);
AddNode(list2,10);
AddNode(list2,11);
list3 = SameNode(list1,list2);
printf("list1:\n");
PrintList(list1);
printf("list1:\n");
PrintList(list2);
printf("same:\n");
PrintList(list3);

DeleteList(list1);
DeleteList(list2);
DeleteList(list3);

return 0;
}
void InitList(pList list)
{
if(list==NULL)
return;
list->Head = list->Tail = NULL;
}
void AddNode(pList list,int value)
{
if(list == NULL)
return ;
pListNode temp = (pListNode)malloc(sizeof(ListNode));
temp->next = NULL;
temp->value = value;
if(list->Head ==NULL)
{
list->Head = list->Tail = temp;
}
else
{
list->Tail->next = temp;
list->Tail = list->Tail->next;
}
}
pList SameNode(pList list1,pList list2)
{
pList newList = (pList)malloc(sizeof(List));
InitList(newList);
pListNode node1 = list1->Head;
pListNode node2 = list2->Head;
while(node1!=NULL&&node2!=NULL)
{
if(node1->value ==node2->value)
{
AddNode(newList,node1->value);
node1 = node1->next;
node2 = node2->next;
}
else if(node1->value<node2->value)
{
node1 = node1->next;
}
else
{
node2 = node2->next;
}
}
return newList;
}
void DeleteList(pList list)
{
if(NULL==list)
return ;
pListNode temp ;
while(list->Head!=NULL)
{
temp = list->Head;
list->Head =list->Head->next;
free(temp);
}
}
void PrintList(pList list)
{
if(list ==NULL)
return ;
pListNode temp =list->Head;
while(temp!=NULL)
{
printf("%d\t",temp->value);
temp = temp->next;
}
printf("\n");
}

可以直接运行

留你的邮箱吧

是C语言中建立顺序表的程序
答:建立方法很多,线性表是顺序表的顺序存储结构,这里我给你写个简单的例子参考一下,只要理解了,怎么写都不会错:具体代码如下:include <stdio.h> typedef struct{ int data[100];int length;}Seqlist;//定义Seq这个新的数据类型 void creat(Seqlist &L);//建立线性表 void show(Seqlist L);/...

试分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,...an-1...
答:——while(q)是指q指的内容不为空的情况下吗?没错。——可是之前的语句已经使它为空了呀??这个不对。之前对q的赋值就只有这句:q=p->next 并没有把NULL赋值给他 如果你觉得这两句语句q=p->next; p -> next=NULL; 具有传递性,于是就等价于q = NULL 的话,你需要对指针这个东...

谁能给一个简单的线性表操作C语言完整程序?
答:1、线性表有两种:typedef struct { ElemType* elem;int length;int listsize;} SqList;//顺序表 void InitList_Sq (SqList& l) { l.elem=new ElemType [LIST_INIT_SIZE];l.length=0;l.listsize=LIST_INIT_SIZE;}//初始化顺序表 然后SqList La;InitList_Sq(La);就可以 typedef struct ...

数据结构 c语言版 ——顺序表的查找、插入与删除
答:include<stdio.h> include<stdlib.h> define N 10 //顺序表的最大容量 int length=0; //顺序表的当前元素个数 define TRUE 1 define FALSE 0 define OK 1 define ERROR 0 define INFEASIBLE -1 define OVERFLOW -2 define LIST_INIT_SIZE 100//线性表存储的空间初始化分配量 define LIST...

用C语言创建一个顺序表并完成插入等操作
答:GY5212-2008 Press any key to continue / include <malloc.h>#include <stdio.h>#include <string.h>#define maxsize 100typedef struct {char *data;int length;}sqlist;void initlist(sqlist *&L) { //初始化顺序表L = (sqlist *)malloc(sizeof(sqlist));L->data = (char *)...

C语言顺序表简单问题
答:/ A线性表为: 顺序表练习程序(C)B线性表为: 该字符串将写入.txt文件 Press any key to continue / include <stdio.h>#include <stdlib.h>#include <string.h>typedef char DataType; // 定义数据数据类型typedef struct {DataType *data; // data指向数据区的首个数据int length; //...

线性表和顺序表的区别
答:地址是可以不连续的)两者存储方式各有优缺点,看情况而定。下面是数据结构中对于线性表的一段定义与操作 代码来源线性表--顺序表的定义与操作示例 include <stdio.h>#include <stdlib.h>#include #define MAXSIZE 20 /* 存储空间初始分配量 */typedef int ElemType; /* ElemType类型根据...

用C语言数据结构【线性表的顺序存储结构】知识解决如下问题,请高手指 ...
答:无论是用链表实现还是用数组实现都有一个共同点:要模拟整个 游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n ,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间 内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求...

线性表与顺序表有何区别?
答:1、概念不一样 顺序表:顺序表是逻辑概念 线性表:线性表是空间概念 2、特点不一样 线性表:(1)集合中必存在唯一的一个“第一元素”。(2)集合中必存在唯一的一个 “最后元素” 。(3)除最后一个元素之外,均有唯一的后继(后件)。(4)除第一个元素之外,均有唯一的前驱(前件)。顺序表...

用c语言描述顺序存储结构的线性表求表长的算法
答:将顺序表初始化为5个元素,在结构中定义了顺序表的长度,int length:所以在主函数中可以直接调用用printf("%d",L.length)就得到了当前的长度,无论是删除,添加,L.length都会随着改变,比如我们建一个添加的函数 status listinsert_sq(sqlist &L, int i ,elemtype e){ int * q , *p ,* newbase...