创建线性表的函数用c语言,线性表的c语言实现

线性表的基本操作c语言实现

代码如下:

创新互联建站总部坐落于成都市区,致力网站建设服务有成都做网站、成都网站制作、网络营销策划、网页设计、网站维护、公众号搭建、微信小程序定制开发、软件开发等为企业提供一整套的信息化建设解决方案。创造真正意义上的网站建设,为互联网品牌在互动行销领域创造价值而不懈努力!

头文件:

2_1.h

#ifndef  _2_1_H

#define  _2_1_H

typedef void SeqList;

typedef void SeqListNode;

//创建线性表

SeqList * SeqList_Create(int capacity);

//销毁线性表

void SeqList_DesTroy(SeqList * list);

void SeqList_Clear(SeqList* list);

int SeqList_Length(SeqList* list);

int SeqList_Capacity(SeqList* list);

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos);

SeqListNode* SeqList_Get(SeqList* list, int pos);

SeqListNode* SeqList_Delete(SeqList* list, int pos);

#endif

源文件:

// 顺序线性表.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include malloc.h

#include stdlib.h

#include "2_1.h"

typedef unsigned int TSeqListNode;

typedef struct {

int len;     //长度

int capacity;//总长度

TSeqListNode * node;//每个节点的指针

} TSeqList;

int main()

{

SeqList* list = SeqList_Create(5);//创建线性表

int i = 6;//赋值6个变量,已超过线性表最大值 5

int j = 1;

int k = 2;

int x = 3;

int y = 4;

int z = 5;

int index = 0;

SeqList_Insert(list, i, 7); //将这6个变量插入线性表中

SeqList_Insert(list, j, 0);

SeqList_Insert(list, k, 0);

SeqList_Insert(list, x, 0);

SeqList_Insert(list, y, 0);

SeqList_Insert(list, z, 0);

//遍历

for(index=0; indexSeqList_Length(list); index++)

{

int* p = (int*)SeqList_Get(list, index);

printf("%d  ", *p);

}

printf("\n");

//删除操作

while( SeqList_Length(list) 0 )

{

int* p = (int*)SeqList_Delete(list, 0);

printf("删除了: %d\n", *p);

}

SeqList_Clear(list);

SeqList_DesTroy(list);

system("pause");

return 0;

}

//创建线性表

SeqList * SeqList_Create(int capacity)

{

TSeqList* ret = NULL ;

if(capacity = 0)

{

ret = (TSeqList*)malloc(sizeof(TSeqList) + sizeof(TSeqListNode)*capacity);  //为线性表分配空间,包含结 //构体和节点的总大小

}

if(NULL != ret)

{

ret-len = 0;

ret-capacity = capacity;

ret-node = (TSeqListNode*)(ret + 1);//将节点指向上述分配到的空间的后部分

}

return ret;

}

//销毁

void SeqList_DesTroy(SeqList * list)

{

free(list);

}

//清空

void SeqList_Clear(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

if(NULL != ret)

{

ret-len = 0;

}

}

//获得线性表的长度

int SeqList_Length(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int len = -1;

if(NULL != ret)

{

len = ret-len;

}

return len;

}

//线性表的总长度

int SeqList_Capacity(SeqList* list)

{

TSeqList * ret = (TSeqList*)list;

int capacity = -1;

if(NULL != ret)

{

ret-capacity = capacity;

}

return capacity;

}

//插入

int SeqList_Insert(SeqList* list, SeqListNode* node, int pos)

{

TSeqList * sList = (TSeqList*)list;

int i,ret = -1;

if((sList != NULL) (pos = 0) sList-capacity = sList-len+1)

{

if(pos = sList-len)

{

pos = sList-len;

}

for(i = sList-len; i pos; i--)

{

sList-node[i] = sList-node[i-1];

}

sList-node[i] = (TSeqListNode)node;

++sList-len;

ret = 1;

}

return ret;

}

//获得指定位置的节点

SeqListNode* SeqList_Get(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

TSeqListNode* node = NULL;

if(NULL != sList pos=0 pos sList-len)

{

node = (TSeqListNode*)sList-node[pos];

}

return node;

}

//删除

SeqListNode* SeqList_Delete(SeqList* list, int pos)

{

TSeqList * sList = (TSeqList*)list;

SeqListNode * node = SeqList_Get( list, pos);

int i;

if(sList != NULL pos = 0 pos sList-len)

{

for( i=pos+1; isList-len; i++)

{

sList-node[i-1] = sList-node[i];

}

sList-len--;

}

return node;

}

演示:

资料拓展:

线性表是最基本、最简单、也是最常用的一种数据结构。

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数据元素的尾指针指向了首位结点)。

我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向链表和循环链表依旧是线性表。

在数据结构逻辑层次上细分,线性表可分为一般线性表和受限线性表。一般线性表也就是我们通常所说的“线性表”,可以自由的删除或添加结点。受限线性表主要包括栈和队列,受限表示对结点的操作受限制。

线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

数据结构中,怎么用C语言构造线性表!

#define

OK

1

#define

ERROR

-1

#define

MAX_SIZE

100

typedef

int

Status

;

typedef

int

ElemType

;

typedef

struct

sqlist

{

ElemType

Elem_array[MAX_SIZE]

;

int

length

;

}

SqList

;

以上为线性表建立的相关定义

Status

Init_SqList(

SqList

*L

)

{

L-elem_array=(

ElemType

*

)malloc(MAX_SIZE*sizeof(

ElemType

)

)

;

if

(

!L

-

elem_array

)

return

ERROR

;

else

{

L-length=

;

return

OK

;

}

}

以上为线性表初始化函数

有以上两部分可构造一个线性表

线性表的实现(C语言)

哈哈,楼主还是自己动手吧,这个如果谁帮了你没准哪天你见到都会把人家砍了了

怎样在C语言创建线性表?

#include"stdio.h"

#includemalloc.h

typedef char ElemType;

typedef struct LNode

{ElemType data;

struct LNode *next;

}LinkList;

void CreatListF(LinkList *L,ElemType a[],int n) //头插法建表

{

LinkList *s;int i;

L=(LinkList *)malloc(sizeof(LinkList));

L-next=NULL;

for(i=0;in;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=a[i];

s-next=L-next;

L-next=s;

}

}

void CreateListR(LinkList *L,ElemType a[],int n) //尾插法建表

{

LinkList *s,*r;int i;

L=(LinkList *)malloc(sizeof(LinkList));

r=L;

for(i=0;in;i++)

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=a[i];

r-next=s;

r=s;

}

r-next=NULL;

}

void InitList(LinkList *L) //初始化线性表

{

L=(LinkList *)malloc(sizeof(LinkList));

L-next=NULL;

}

void DestroyList(LinkList *L) //销毁线性表

{

LinkList *p=L,*q=p-next;

while(q!=NULL)

{

free(p);

p=q;

q=p-next;

}

free(p);

}

int ListEmpty(LinkList *L) //判断线性表是否为空

{

return(L-next==NULL);

}

int ListLength(LinkList *L) //求线性表的长度

{

LinkList *p=L;int n=0;

while(p-next!=NULL)

{

n++;p=p-next;

}

return(n);

}

void DispList(LinkList *L) //输出线性表

{

LinkList *p=L-next;

while(p!=NULL)

{

printf("%c",p-data);

p=p-next;

}

}

int GetElem(LinkList *L,int i,ElemType e) //求线性表中某个数据元素值

{

int j=0;

LinkList *p=L;

while(jip!=NULL)

{

j++;p=p-next;

}

if(p==NULL)

return 0;

else

{

e=p-data;return 1;

}

}

int LocateElem(LinkList *L,ElemType e) //按元素值查找

{

LinkList *p=L-next;

int i=1;

while(p!=NULLp-data!=e)

{

p=p-next;i++;

}

if(p==NULL)return(0);

else return(i);

}

int ListInsert(LinkList *L,int i,ElemType e) //插入数据元素

{

int j=0;

LinkList *p=L,*s;

while(ji-1p!=NULL)

{

j++;p=p-next;

}

if(p==NULL)return 0;

else

{

s=(LinkList *)malloc(sizeof(LinkList));

s-data=e; s-next=p-next; p-next=s;

return 1;

}

}

int ListDelete(LinkList *L,int i,ElemType e) //删除数据元素

{

int j=0;

LinkList *p=L,*q;

while(ji-1p!=NULL)

{

j++;p=p-next;

}

if(p==NULL)

return 0;

else

{

q=p-next;

if(q==NULL)return 0;

e=q-data;

p-next=q-next;

free(q);

return 1;

}

}

int main()

{

ElemType e,a[5]={'a','b','c','d','e'};

LinkList *h;

InitList(h); //初始化顺序表h

CreateListR(h,a[0],5); //依次采用尾插入法插入a,b,c,d,e元素

printf("单链表为:");

DispList(h); printf("\n"); //输出顺序表h

printf("该单链表的长度为:");

printf("%d",ListLength(h)); printf("\n"); //输出顺序表h的长度

if(ListEmpty(h)) printf("该单链表为空。\n");

else printf("该单链表不为空。\n"); //判断顺序表h是否为空

GetElem(h,3,e);printf("该单链表的第3个元素为:");

printf("%c",e); printf("\n"); //输出顺序表h的第3个元素

printf("该单链表中a的位置为:");

printf("%d",LocateElem(h,'a')); printf("\n"); //输出元素'a'的位置

ListInsert(h,4,'f'); //在第4个元素位置插入'f'素

printf("在第4 个元素位置上插入'f'后单链表为:");

DispList(h); printf("\n"); //输出顺序表h

ListDelete(h,3,e); //删除L的第3个元素

printf("删除第3个元素后单链表为:");

DispList(h); printf("\n"); //输出顺序表h

DestroyList(h); //释放顺序表h

return 0;

}

如何建立一个线性表,用c++的基本语法是什么?

用c++建立一个线性表有以下5步:

1、准备数据:

定义了顺序表的最大长度MAXLEN、顺序表数据元素的类型DATA以及顺序表的数据结构SLType。在数据结构SLType中,Listen为顺序表已存结点的数量,也就是当前顺序表的长度,ListData是一个结构数组,用来存放各个数据结点。我们认为该顺序表是一个班级学生的记录。其中,key为学号,name为学生的名称,age为年龄。因为数组都是从下标0开始的,为了使用方便,我们从下标1开始记录数据结点,下标0的位置不可用。

2、初始化顺序表:

在使用顺序表之前,首先创建一个空的顺序表,也就是初始化顺序表。这里,在程序中只需设置顺序表的结点数量ListLen为0即可。这样,后面需要添加的数据元素将从顺序表的第一个位置存储。

示例代码:

3、计算线性表的长度:计算线性表的长度也就是计算线性表中结点的个数,由于我们在SLType中定义了ListLen来表示结点的数量,所以我们只需要获得这个变量的值即可。

4、插入结点:

插入节点就是在线性表L的第i个位置上插入一个新的结点,使其后的结点编号依次加1。这时,插入一个新节点之后,线性表L的长度将变为n+1。插入结点操作的难点在于随后的每个结点数据都要向后移动,计算机比较大,示例代码如下:

5、追加结点:

追加结点就是在顺序表的尾部插入结点,因此不必进行大量数据的移动,代码实现与插入结点相比就要简单的多。


文章标题:创建线性表的函数用c语言,线性表的c语言实现
URL标题:http://pwwzsj.com/article/hscjoo.html