链表L中第i个数据元素的内容
我写了个线性链表的代码,相加个功能,要得到链表中第id个元素的内容,代码要怎么写呢?我的代码如下:#include"stdio.h"#include"stdlib.h"#...
我写了个线性链表的代码,相加个功能,要得到链表中第id个元素的内容,代码要怎么写呢?
我的代码如下:
#include "stdio.h"
#include "stdlib.h"
#define ERROR 0
#define OK 0
typedef int Elemtype;
typedef int status;
typedef struct LNode{
Elemtype date;
struct LNode *next;
}LNode,*LinkList;
//建立链表
void CreateList(LinkList &L){
LinkList p,r;int i,n;
printf("请输入要建立链表的长度\n");
scanf("%d",&n);
printf("请依次输入各复数的实部与虚部\n");
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->date);
r->next=p;
r=p;
}
r->next=NULL;
}
//输出链表
void PrintList(LinkList L){
LinkList p;
int k=0,i=1;
for(p=L->next;p;p=p->next){
if(k%2==0){
printf("C%d=%d",i,p->date);
k++;continue;
}
if(k%2==1){
if(p->date>=0)printf("+");
printf("%d",p->date);
printf("i");
printf("\n");
k++;i++;
}
}
}
//在i位置插入元素e
status ListInsert(LinkList &L,int i,Elemtype e){
LinkList p,s;int j;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->date=e;s->next=p->next;
p->next=s;
return OK;
}
//删除第i个元素
status ListDelete(LinkList &L,int i,Elemtype &e){
LinkList p,q;int j;
p=L;j=0;
while(p->next&&j<i-1){p=p->next;++j;}
if(!(p->next)||j>i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->date;free(q);
return OK;
}
void main(){
LinkList L;Elemtype e;int i,n,k,a1,a2;
k=1;
CreateList(L);
PrintList(L);
while(k!=0){
printf("\n输入1则插入元素,输入2则删除元素,输入3则结束数据输入\n");
scanf("%d",&n);
switch(n){
case 1:
printf("请输入要插入元素的位置");scanf("%d",&i);
printf("请输入要插入的元素");scanf("%d",&e);
ListInsert(L,i,e);
PrintList(L);break;
case 2:
printf("请输入要删除元素的位置");scanf("%d",&i);
ListDelete(L,i,e);
PrintList(L);break;
case 3:
break;
}
}
} 展开
我的代码如下:
#include "stdio.h"
#include "stdlib.h"
#define ERROR 0
#define OK 0
typedef int Elemtype;
typedef int status;
typedef struct LNode{
Elemtype date;
struct LNode *next;
}LNode,*LinkList;
//建立链表
void CreateList(LinkList &L){
LinkList p,r;int i,n;
printf("请输入要建立链表的长度\n");
scanf("%d",&n);
printf("请依次输入各复数的实部与虚部\n");
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->date);
r->next=p;
r=p;
}
r->next=NULL;
}
//输出链表
void PrintList(LinkList L){
LinkList p;
int k=0,i=1;
for(p=L->next;p;p=p->next){
if(k%2==0){
printf("C%d=%d",i,p->date);
k++;continue;
}
if(k%2==1){
if(p->date>=0)printf("+");
printf("%d",p->date);
printf("i");
printf("\n");
k++;i++;
}
}
}
//在i位置插入元素e
status ListInsert(LinkList &L,int i,Elemtype e){
LinkList p,s;int j;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->date=e;s->next=p->next;
p->next=s;
return OK;
}
//删除第i个元素
status ListDelete(LinkList &L,int i,Elemtype &e){
LinkList p,q;int j;
p=L;j=0;
while(p->next&&j<i-1){p=p->next;++j;}
if(!(p->next)||j>i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->date;free(q);
return OK;
}
void main(){
LinkList L;Elemtype e;int i,n,k,a1,a2;
k=1;
CreateList(L);
PrintList(L);
while(k!=0){
printf("\n输入1则插入元素,输入2则删除元素,输入3则结束数据输入\n");
scanf("%d",&n);
switch(n){
case 1:
printf("请输入要插入元素的位置");scanf("%d",&i);
printf("请输入要插入的元素");scanf("%d",&e);
ListInsert(L,i,e);
PrintList(L);break;
case 2:
printf("请输入要删除元素的位置");scanf("%d",&i);
ListDelete(L,i,e);
PrintList(L);break;
case 3:
break;
}
}
} 展开
展开全部
其实跟你的LinsInsert()差不多,代码如下:
#include "stdio.h"
#include "stdlib.h"
#define ERROR 0
#define OK 0
typedef int Elemtype;
typedef int status;
typedef struct LNode{
Elemtype date;
struct LNode *next;
}LNode,*LinkList;
//建立链表
void CreateList(LinkList &L){
LinkList p,r;int i,n;
printf("请输入要建立链表的长度\n");
scanf("%d",&n);
printf("请依次输入各复数的实部与虚部\n");
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->date);
r->next=p;
r=p;
}
r->next=NULL;
}
//输出链表
void PrintList(LinkList L){
LinkList p;
int k=0,i=1;
for(p=L->next;p;p=p->next){
if(k%2==0){
printf("C%d=%d",i,p->date);
k++;continue;
}
if(k%2==1){
if(p->date>=0)printf("+");
printf("%d",p->date);
printf("i");
printf("\n");
k++;i++;
}
}
}
//在i位置插入元素e
status ListInsert(LinkList &L,int i,Elemtype e){
LinkList p,s;int j;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->date=e;s->next=p->next;
p->next=s;
return OK;
}
//查找第i个元素
Elemtype QueryList(LinkList L, int i)
{
LinkList p = L;
int j = 0;
while(p && j < i - 1)
{
p = p->next;
j++;
}
return p->next->date;
}
//删除第i个元素
status ListDelete(LinkList &L,int i,Elemtype &e){
LinkList p,q;int j;
p=L;j=0;
while(p->next&&j<i-1){p=p->next;++j;}
if(!(p->next)||j>i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->date;free(q);
return OK;
}
void main(){
LinkList L;Elemtype e;int i,n,k,a1,a2;
k=1;
CreateList(L);
PrintList(L);
while(k!=0){
printf("\n输入1则插入元素,输入2则删除元素,输入3查询元素,输入4则结束数据输入\n");
scanf("%d",&n);
switch(n){
case 1:
printf("请输入要插入元素的位置");scanf("%d",&i);
printf("请输入要插入的元素");scanf("%d",&e);
ListInsert(L,i,e);
PrintList(L);break;
case 2:
printf("请输入要删除元素的位置");scanf("%d",&i);
ListDelete(L,i,e);
PrintList(L);break;
case 3:
printf("请输入要查询的元素的位置");
scanf("%d", &i);
if (i % 2 ==1)
{
printf("查询的元素是:%d", QueryList(L, i));
}
else
{
printf("查询的元素是:%di", QueryList(L, i));
}
break;
case 4:
exit(0);
}
}
}
#include "stdio.h"
#include "stdlib.h"
#define ERROR 0
#define OK 0
typedef int Elemtype;
typedef int status;
typedef struct LNode{
Elemtype date;
struct LNode *next;
}LNode,*LinkList;
//建立链表
void CreateList(LinkList &L){
LinkList p,r;int i,n;
printf("请输入要建立链表的长度\n");
scanf("%d",&n);
printf("请依次输入各复数的实部与虚部\n");
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
r=L;
for(i=n;i>0;--i){
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->date);
r->next=p;
r=p;
}
r->next=NULL;
}
//输出链表
void PrintList(LinkList L){
LinkList p;
int k=0,i=1;
for(p=L->next;p;p=p->next){
if(k%2==0){
printf("C%d=%d",i,p->date);
k++;continue;
}
if(k%2==1){
if(p->date>=0)printf("+");
printf("%d",p->date);
printf("i");
printf("\n");
k++;i++;
}
}
}
//在i位置插入元素e
status ListInsert(LinkList &L,int i,Elemtype e){
LinkList p,s;int j;
p=L;j=0;
while(p&&j<i-1){p=p->next;++j;}
if(!p||j>i-1)return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->date=e;s->next=p->next;
p->next=s;
return OK;
}
//查找第i个元素
Elemtype QueryList(LinkList L, int i)
{
LinkList p = L;
int j = 0;
while(p && j < i - 1)
{
p = p->next;
j++;
}
return p->next->date;
}
//删除第i个元素
status ListDelete(LinkList &L,int i,Elemtype &e){
LinkList p,q;int j;
p=L;j=0;
while(p->next&&j<i-1){p=p->next;++j;}
if(!(p->next)||j>i-1) return ERROR;
q=p->next;p->next=q->next;
e=q->date;free(q);
return OK;
}
void main(){
LinkList L;Elemtype e;int i,n,k,a1,a2;
k=1;
CreateList(L);
PrintList(L);
while(k!=0){
printf("\n输入1则插入元素,输入2则删除元素,输入3查询元素,输入4则结束数据输入\n");
scanf("%d",&n);
switch(n){
case 1:
printf("请输入要插入元素的位置");scanf("%d",&i);
printf("请输入要插入的元素");scanf("%d",&e);
ListInsert(L,i,e);
PrintList(L);break;
case 2:
printf("请输入要删除元素的位置");scanf("%d",&i);
ListDelete(L,i,e);
PrintList(L);break;
case 3:
printf("请输入要查询的元素的位置");
scanf("%d", &i);
if (i % 2 ==1)
{
printf("查询的元素是:%d", QueryList(L, i));
}
else
{
printf("查询的元素是:%di", QueryList(L, i));
}
break;
case 4:
exit(0);
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询