您的位置:首页 > 理论基础 > 数据结构算法

数据结构—线性表的链式表示和实现

2010-10-01 13:38 615 查看
// 线性表的链式.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include<iostream>

using namespace std;

typedef struct LNode{

int data;

struct LNode *next;

}LNode,*LinkList;

/* 操作结果:构造一个空的线性表L */

/************************************************************************/

void InitList(LinkList *L)

{

*L = (LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */

if( !*L ) /* 存储分配失败 */

exit(-1);

(*L)->next = NULL; /* 指针域为空 */

}

int GetElem_L(LinkList L,int i){

//L为带头结点的单链表的头指针

//当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR

int e;

LNode *p;

p=L->next;

int j=1; //初始化,p指向第一个结点,j为计数器

while(p&&j<i){ //顺指针向后查找,直到p指向第i个元素或p为空

p=p->next;

++j;

}

if(!p||j>i) return false;//第i个元素不存在

e=p->data;//取第i个元素

return e;

}//GetElem_L

int ListInsert_L(LinkList &L,int i,int e){

//在带头结点的单链线性表L中第i个位置之前插入元素e

LinkList p,s;

p=L;

int j=0;

while(p && j<i-1){p=p->next;++j;} //寻找第i-1个结点

if(!p||j>i-1) return false;//i小于1或者大于表长加1

s=(LinkList)malloc(sizeof(LNode));//生成新结点

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

p->next=s;

return true;

}//ListInsert_L

int ListDelete_L(LinkList &L,int i){

//在带头结点的单链表L中,删除第i个元素,并由e返回其值

LinkList p,q;

p=L;

int j=0,e;

while(p->next && j<i-1){ //寻找第i个结点,并令p指向其前趋

p=p->next;

++j;

}

if(!(p->next) || j>i-1) return false;//删除位置不合理

q=p->next; p->next=q->next; //删除并释放结点

e=q->data;

free(q);

return true;

}//ListDelete_L



int main(int argc, char* argv[])

{

LinkList LN; //定义一个结构体变量

InitList(&LN); //线性表初始化

int num,da,sea,val,knv,cmp,ch[200];

cout<<"输入元素的个数"<<endl;

cin>>num;

cout<<"请输入各个元素"<<endl;

/* for(int i=1;i<=num;i++)

{

ListInsert_L(LN,i,i);

}*/

for(int i=1;i<=num;i++)//插入各个元素

{

cin>>ch[i];

ListInsert_L(LN,i,ch[i]);

}

cout<<"线性表的元素为"<<endl;

for(int j=1;j<=num;j++) //打印出线性表的元素

{

val=GetElem_L(LN,j);

cout<<val<<" ";

}



cout<<"/n请输入要查找的第i个元素"<<endl; //查找第i个元素

cin>>sea;

da=GetElem_L(LN,sea);

cout<<"查找到的元素为"<<da<<endl;



cout<<"请输入要删除的第i各元素"<<endl;//删除第i个元素

cin>>knv;

ListDelete_L(LN,knv);

cout<<"删除第i个元素后的线性表为"<<endl;

for(int k=1;k<=num-1;k++)

{

cmp=GetElem_L(LN,k);

cout<<cmp<<" ";

}cout<<endl;



return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: