线性表的链式存储实现
问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElementType;
typedef struct LNode *List;
struct LNode{
ElementType Data;
List Next;
};
struct LNode L;
List PtrL;
//表的创建(尾插法)
void CreateListTail(List PtrL,int m[],int n){
List p,s;
int i;
PtrL=(List)malloc(sizeof(LNode));
s=PtrL;
for(i=0;i<n;i++){
p=(LNode *)malloc(sizeof(LNode));
p->Data=m[i];
s->Next=p;
s=p;
}
s->Next=NULL;
}
//求表长
int Length(List PtrL){
List p=PtrL;/* p指向表的第一个结点*/
int j=0;
while(p){
p=p->Next;
j++;/* 当前p指向的是第 j 个结点*/
}
return j;
}
//获取元素
Status Get(List PtrL,int i,ElementType *e){
int j;
List p;
p=PtrL->Next;
j=1;
while(p&&j<i){
p=p->Next;
++j;
}
if(!p||j>i){
return ERROR;
}
*e=p->Data;
return OK;
}
//查找
//按序号查找
List FindKth(int K,List PtrL){
List p=PtrL;
int i=1;
while(p!=NULL&&i<K){
p=p->Next;
i++;
}
if(i==K)
return p;/* 找到第K个,返回指针 */
else
return NULL;/* 否则返回空 */
}
/*
//按值查找
List Find(ElementType X,List PtrL){
List p=PtrL;
while(p!=NULL&&p->Data!=X)
p=p->Next;
return p;
}
*/
//插入
List Insert(ElementType X,int i,List PtrL){
List p,s;
if(i==1){/* 新结点插入在表头 */
s=(List)malloc(sizeof(struct LNode));/*申请、填装结点*/
s->Data=X;
s->Next=PtrL;
return s;
}
p=FindKth(i-1,PtrL);/* 查找第i-1个结点 */
if(p==NULL){/* 第i-1个不存在,不能插入 */
printf("参数i错");
return NULL;
}
else{
s=(List)malloc(sizeof(struct LNode));/*申请、填装结点*/
s->Data=X;
s->Next=p->Next;/*新结点插入在第i-1个结点的后面*/
p->Next=s;
return PtrL;
}
}
//删除
List Delete(int i,List PtrL){
List p,s;
if(i==1){/* 若要删除的是表的第一个结点 */
s=PtrL;/*s指向第1个结点*/
if(PtrL!=NULL)
PtrL=PtrL->Next;/*从链表中删除*/
else
return NULL;
free(s);
return PtrL;
}
p=FindKth(i-1,PtrL);/*查找第i-1个结点*/
if(p==NULL){
printf("第%d个结点不存在",i-1);
return NULL;
}
else if(p->Next==NULL){
printf("第%d个结点不存在",i);
return NULL;
}
else{
s=p->Next;/*s指向第i个结点*/
p->Next=s->Next;/*从链表中删除*/
free(s);/*释放被删除结点 */
return PtrL;
}
}
//输出
Status Output(List PtrL)
{
List p;
p=PtrL->Next;
while(p){
printf("%d",p->Data);
p=p->Next;
}
printf("\n");
}
int main(){
int i,k,j,n,e,m[1000];
printf("请输入要存储元素的总个数:");
scanf("%d",&n);
printf("请输入各个元素的值:");
for(i=0;i<n;i++){
scanf("%d",&m[i]);
}
CreateListTail(PtrL,m,n);
printf("此时链表的各个元素如下:\n");
Output(PtrL);
printf("请输入要获取第i个元素并返回到e值中(输入j的值):");
scanf("%d",&j);
Get(PtrL,j,&e);
printf("此时e的值为第j个元素值:%d\n",e);
printf("请输入在第k个元素前插入一个元素e1:");
int e1;
scanf("%d%d",&k,&e1);
Insert(e1,k,PtrL);
printf("此时链表的各元素如下:\n");
Output(PtrL);
printf("请输入要删除链表中的第几个元素:");
int l;
scanf("%d",&l);
Delete(i,PtrL);
printf("此时链表的各元素如下:\n");
Output(PtrL);
return 0;
}
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
想要程序运行成功