64,648
社区成员
发帖
与我相关
我的任务
分享
#include <malloc.h>
#define OK 1
#define ERROR -1
#define OVERFLOW -2
#define NULL 0
typedef int ElemType;
typedef struct LNode {
ElemType data;//数据域
struct LNode* next;//指针域
}LNode, *LinkList;
typedef int Status;
Status InitLinkList_L(LinkList &L){//建立一个带头节点的单链表
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
return OK;
}
Status GetElem_L(LinkList L,int i,ElemType &e){//获得第i个位置上的元素并存放在e中
LinkList p = L->next;//p指像第一个结点
int j=1;//j为计数器
while(p && j<i){
p = p->next; ++j;
}
if(!p)
return ERROR;
e = p->data;
return OK;
}
Status LinkInsert_L(LinkList &L,int i,ElemType e){//在第i个元素之前插入新的数据元素e
LinkList p = L;//将p指向头结点
int j=0;//j为计数器,因为此时p指向头结点
while(p && j<i-1){
p = p->next;//p将指向第i-1个结点
++j;
}
if(!p) return ERROR;//i-1超过表长
LinkList s = (LinkList)malloc(sizeof(LNode));//生成一个新结点
s->data = e;//给该结点数据域赋值
s->next = p->next; p->next = s;//修改指针完成插入
return OK;
}
Status LinkDelete_L(LinkList &L,int i,ElemType &e){
LinkList p = L;//将p指向头结点
int j=0;//j为计数器,因为此时p指向头结点
while(p && j<i-1){
p = p->next;//p将指向第i-1个结点
++j;
}
if(!p->next) return ERROR;//删除位置不合理
LinkList q = p->next;//将q指针指向需要删除的结点
p->next = q->next;//修改指针
e = q->data;//将删除的结点中的数据域赋值给e
free(q);//释放结点
return OK;
}
#include "DS.h"
#include <iostream>
using namespace std;
int main(){
ElemType e;
LinkList S;
InitLinkList_L(S);
LinkInsert_L(S,1,2);
cout<<GetElem_L(S,1,e);
return 0;
}
把main改为:
int main(){
ElemType e;
LinkList S;
InitLinkList_L(S);
LinkInsert_L(S,1,2);
if(GetElem_L(S,1,e)) cout<<e;
return 0;
}
汗~~~~~~
你get返回的是啥?
Status GetElem_L(LinkList L,int i,ElemType &e){//获得第i个位置上的元素并存放在e中
LinkList p = L->next;//p指像第一个结点
int j=1;//j为计数器
while(p && j<i){
p = p->next; ++j;
}
if(!p)
return ERROR;
e = p->data;
return OK;
}