数据结构—线性表的链式表示和实现
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;
}
//
#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;
}
相关文章推荐
- 数据结构教程 第八课 线性表的链式表示与实现
- 数据结构之线性表的链式表示和实现
- 数据结构(2):线性表的链式表示和实现
- 数据结构算法代码实现——线性表的链式表示与实现(单链表)(三 )
- 线性表的顺序表示和实现 - 数据结构
- 数据结构(线性表):线性表的静态链式表示
- 数据结构(6): 链队——队列的链式表示和实现
- 线性表的顺序表示和实现 - 数据结构
- 数据结构5:线性表的链式表示和相关的12个操作
- 数据结构之:线性表的顺序表示和实现
- 线性表链式存储结构的表示和实现
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 数据结构笔记3 线性表的链式表示
- 数据结构之线性表――链式存储结构之单链表(php代码实现)
- 数据结构笔记3 线性表的链式表示
- 数据结构1:线性表的顺序表示和实现
- 数据结构(4)线性表之链式表示
- 数据结构——线性表链式表示和实现(2)
- 数据结构笔记(二)线性表的链式表示和基本操作
- 数据结构之栈的链式表示及其实现