动态线性表的建立,查找插入删除遍历程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

//线性表的动态分配顺序存储结构(借助指针)

#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量#define LISTINCREMENT 2 //线性表存储空间的分配增量

typedef struct{

int *elem; //指示动态分配数组的指针

int length; //当前长度

int listsize; //当前存储容量

}SqList; //用结构体定义顺序表

//建立一个顺序表

SqList InitList_Sq(SqList &L)

{

int x;

L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));//初始的动态分配

L.length=0; //初始化当前长度为0

L.listsize=LIST_INIT_SIZE;//初始化当前存储容量为初始分配量

printf("请输入顺序表中的元素:\n");

scanf("%d",&x);

while(x)

{

L.elem[L.length ++]=x;

scanf("%d",&x);

}

return L;

}

//遍历顺序表

void Traverse_Sq(SqList L)

{

printf("\n\n");

for(int i=0;i

printf("%5d",L.elem [i]);

printf("\n\n");

}

// 给出元素值,查找位置

void GetElem_1(SqList L,int e){

for(int i=0;i

if(L.elem[i]==e)

{

printf("元素%d在表的第%d个位置上\n\n",e,i+1);

return;

}

printf("顺序表中没有%d这个元素\n\n",e);

}

//给出位置,查找元素值

int GetElem_2(SqList L,int i)

{

if(i>L.length-1) {printf("您的输入超出了数组的范围"); exit(0); }

return L.elem[i];

}

//在给出位置上插入给出值

void ListInsert_Sq(SqList &L,int i,int e)

{

int *newbase;

int *q,*p;

if(i<1||i>L.length+1) {printf("您输入的值不合法,退出"); exit(0);}

if(L.length>=L.listsize)

{

newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));

if(!newbase) exit(0);

L.elem=newbase;

L.listsize+=LISTINCREMENT;

}

q=&(L.elem[i-1]);//q为插入位置

p=&(L.elem[L.length-1]); //p为原数组的最后一个位置

for(;p>=q;--p)

*(p+1)=*p; //从插入位置到最后一个位置上的所有元素都后移一位*q=e; //插入e

++L.length;

}

//删除数组中的指定值

void ListDelete_Sq(SqList &L,int elem)

{

int i,j;

i=0;

for(j=0;j

if(L.elem[j]!=elem)

L.elem[i++]=L.elem[j];

L.length=i;

}

//删除指定位置上的元素

int ListDelete_Sq1(SqList &L,int i)

{

int *p,*q;

p=&(L.elem[i]); //q为删除元素的位置

/*q=&(L.elem[L.length-1]);//p为原数组的最后一个位置

for(++p;q<=p;++p)

*(p-1)=*p;

--L.length;*/

return *p;

}

//线性表的单链表存储结构

typedef struct Node

{

int elem;

struct Node *next;

}LNOde,*LinkList;

//采用尾差法建立一个单链表

void CreateList_L(LinkList &LL){

int x;

LinkList p,pre; //LNode *p,*pre;

LL=(Node *)malloc(sizeof(LNOde));

pre=LL;

printf("请输入单链表中的元素:\n");

scanf("%d",&x);

while(x)

{

p=(LinkList)malloc(sizeof(Node));

p->elem=x;

pre->next=p;

pre=p;

scanf("%d",&x);

}

pre->next=NULL;

// return(LL);

}

//遍历线性链表

void TraverseList_L(LinkList LL)

{

LNOde *p;

printf("\n\n");

p=LL->next;

if(p!=NULL)

do

{

printf("%5d",p->elem);

p=p->next;

}while(p!=NULL);

else

printf("单链表中无元素。\n");

}

void GetELem_L(LinkList LL,int elem) {//查找元素在单链表中的位置

int i;

LNOde *p;

p=LL->next;

相关文档
最新文档