您的位置:首页 > 其它

线性链表的定义与元素插入、删除的操作实现

2013-07-28 15:56 197 查看
优点:线性链表可以迅速实现元素的插入与删除,优化分配了表元素的存储空间
缺点:表元素占用内存空间不连续,对表元素排序最好用顺序表实现
#define NULL 0
#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
////////定义结构体///////////////////////////
int e;
struct Node *next;
}Node,*DLB;
void Xinjian(DLB &L){
/////////建立一个 空链表///////////////////
L=(DLB)malloc(sizeof(Node));
L->next=NULL;
}//Xjian
void Cunbiao(DLB &L,int n){
//存储长度为n的线性表
Node *p,*q;
int i;
q=L;
for(i=1;i<=n;i++)
{
p=(DLB)malloc(sizeof(Node));
scanf("%d",&p->e);
//p->next=L->next;
p->next=q->next;
q->next=p;
q=q->next;
//L->next=p;
}
}//Cunbiao
void Print(DLB L){
//打印输出
int i;
while(L->next)
{
printf("%d ",L->next->e);
L=L->next;
}
puts("");
}
void Incert(DLB &L,int t,int e){
//在位序为t的元素前插入一个新的元素e
//注意这里默认插入位置是合法的,程序的健壮性由读者自己开发哦
int i;
Node *p,*q;
p=L;
q=(DLB)malloc(sizeof(Node));
q->e=e;
for(i=1;i<t;i++)
{
p=p->next;
}
q->next=p->next;
p->next=q;
}//Incert
void Delet(DLB &L,int t,int &e){
//删除位序为t的线性表元素并用e返回被删元素的值
int i;
Node *p,*q;
p=L;
q=L;
for(i=1;i<=t;i++)
{
if(i<t)p=p->next;
q=q->next;
}
e=q->e;
p->next=q->next;
free(q);
}
int main()
{
DLB L;
int n,e1,e2,E,e;
Xinjian(L);
printf("请输入单链表长度:\n");
scanf("%d",&n);
Cunbiao(L,n);
Print(L);
printf("请输入插入元素位置与插入元素的值:\n");
scanf("%d %d",&e1,&E);
Incert(L,e1,E);
Print(L);
printf("请输入删除元素位置:\n");
scanf("%d",&e2);
Delet(L,e2,e);
printf("被删除元素的值为%d\n",e);
Print(L);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐