本文原为转载,但发现插入和删除第一个节点出错,本文改过来了
#include
#include
#define OK 1
#define ERROR 0
typedef int ElemType ;
typedef int status;
typedef struct node
{
ElemType data;
struct node *next;
}Lnode,*LinkList;//Lnode为变量类型,LinkList为指针
int Insert_List(LinkList &head,int n)//插入N个元素放在带表头结点链表中。
{
head= (Lnode *) malloc(sizeof(Lnode));//还可写成 (LinkList )malloc(sizeof(struct node)); (struct node *)malloc(sizeof(struct node));
head->next=NULL;//带表头结点的head先申请单元,第一个结点不放线性表中的数据元素
int x;
printf("input %d number in to create list",n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);//读入X
LinkList p=(LinkList)malloc(sizeof(Lnode));//申请结点空间
if(p==NULL)
return ERROR;
p->data=x;//赋值数据
p->next=head->next;//插入表头、第一个结点单元,实际上第一个
head->next=p;//接头,与head链接
}
return OK;
}
void Destory_List(LinkList &head)//释放空间
{
LinkList p=head->next;//从第一个有效结点开始
while(p)//当p有效结点没有结束时
{
head->next=p->next;//修改链表,(保存链表)或者head->next=head->next->next;
free(p);//释放P
printf("dispose one real space \n");//打印提示信息
p=head->next;//修改下一个要释放的结点
}
free(head);//释放头
printf("dispose the head space \n");//打出提示信息
}
void Print_List(LinkList head)
{
LinkList p=head->next;//第一个有效结点开始打印
while(p)
{
printf("%d ",p->data);//打印
p=p->next;//后移
}
printf("\n");
}
int GetElem_List(LinkList head,int i,ElemType &e)
{
int k=1;//计数器初始化为1
LinkList p=head->next;//第一个有效结点
while((k{
p=p->next;//后移
k++;//计数
}
if(p)
{ e=p->data;//取值
return OK;//成功
}
else return ERROR;// 失败没有这个位置的数据
}
int Insert_List(LinkList &head,int i,ElemType e) //在线性表中第i个元素之间插入e
{
int k=1; //计数
LinkList last=head;//从头开始打i的位置 last表示前面一个结点
LinkList q=last->next;//q表示线性表中第i个结点,Last的后继
while((k{
last=q; //保存前驱
q=q->next; //后移
k++; //计数
}
if(q==NULL) //判断我Q是否为空
return ERROR; //返回失败
else
{
LinkList p= (LinkList)malloc(sizeof(Lnode));//要插入的结点
p->data=e;//赋值
p->next=q;//链尾
last->next=p; //链头
return OK;//
}
}
int Delete_List(LinkList &head,int i,ElemType &e) //删除线性表中第i个元素,并且把值用e带回
{
int k=1; //计数
LinkList last=head; //第一个有效结点,last为前驱
LinkList p=last->next; // /p为第i个结点
while((k{
last=p; //保存前驱
p=p->next; //Insert_List 后移
k++; //计数
}
if(p==NULL) //非空
return ERROR; //失败
else {
e=p->data; //取值
last->next=p->next; //删除p
free(p); //释放空间
printf("delete i in the linklist \n"); //打印提示信息
return OK; //成功
}
}
void main()
{
LinkList L1;
Insert_List(L1,5);//建立5个元素的线性表
Print_List(L1);//打印
int x;
int j;
printf("\n input j to getList \n");//输入J, 取第J个线性表中的元素
scanf("%d",&j);// 读
GetElem_List(L1,j,x);//调用取第J个线性表中的元素
printf("%d \n",x);//输入X插入线性表
printf("input x to insert \n");
scanf("%d",&x);
int i;
printf("input i to port insert_List\n");//输入I,表示第I个位置之间插入X
scanf("%d",&i);
Insert_List(L1,i,x);//调用 插入X在第I个位置之间
Print_List(L1);//打印
int e;
printf("input i to DeleleList i \n");
scanf("%d",&i);
Delete_List(L1,i,e);//删除第I个位置的元素
printf("%d\n",e);//打印被 删除的元素
Print_List(L1);//打印表
Destory_List(L1);//释放空间
}
阅读(1582) | 评论(0) | 转发(0) |