69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;//数据域
struct LNode *next; //指针域
}LNode, *LinkList;
//初始化线性表
void Init_LinkList(LinkLinst &L){
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
}
//取元素
int GetElem_LinkList(LinkList &L, int i, Elemtype e){
//L是带头结点的链表的头指针,以e返回第i个元素
p = L->next;//p指向第一个节点
j = 1;//j为记数量
while(p&&j<1){//顺时针向后查找,直到p指向第i个元素
p = p->next;
++j;
}
if(!p||j>i){//如果p不存在
return 0;
}
else{
e = p->data;
return 1;
}
}
//插入数组元素
int Insert_LinkList(LinkList &L, int i, ElemType e){
p = L->next;
j=0;
while(p&&j<i-1){
p=p->next;
++j
}
if(!p||j>i-1){//插入位置非法
return 0;
}
else{
s=(LinkList)malloc(sizeof(LNode));
s->data = x;
s->next = p->next;
p-next = s;
return 1;
}
}
//删除元素
int Delete_LinkList(LinkList &L, int i, ElemType e){
p = L->next;
j=1;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1){
return 0;
}
else{
q=p->next;
p->next=q->next;
e = q->data;
free(q);
return 1;
}
//建立线性表
//头插法:
void CreatLinkList(LinkList &L, int n){
L=(LinkList *)malloc(sizeof(LinkList);
//创建头结点
L->next=NULL;
for(i=n;i>0;i--){
p=(LinkList *)malloc(sizeof(LNode));
scanf(&p->data);
p->next = L->next;
L->next = p;
}
}
//线性表的合并
void Merge_L(LinkList &La, LinkList &Lb, LinkList &Lc){
//按值排序的单链表La,Lb,归并为Lc后也按值排序
pa = La->next;
pb = Lb->next;
Lc = pc = La;//初始化
while(pa&&pb){//将pa,pa结点按大小依次插入c中
if(pa->data<=pb->data){
pc-next=pa;
pc= pa;
pa=pa->next;
}else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
pc -> next =pa?pa:pb;//插入剩余值
free(Lb);
}
}
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;//数据域
struct LNode *next; //指针域
}LNode, *LinkList;
//初始化线性表
void Init_LinkList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(LNode));
(*L)->next = NULL;
}
//取元素
int GetElem_LinkList(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p;
//L是带头结点的链表的头指针,以e返回第i个元素
p = (*L)->next;//p指向第一个节点
j = 1;//j为记数量
while (p && j < 1) {//顺时针向后查找,直到p指向第i个元素
p = p->next;
++j;
}
if(!p||j>i){//如果p不存在
return 0;
}
else{
*e = p->data;
return 1;
}
}
//插入数组元素
int Insert_LinkList(LinkList *L, int i, ElemType e)
{
int j;
LinkList p, s;
p = (*L)->next;
j = 0;
while (p && j < i-1) {
p = p->next;
++j;
}
if (!p || j > i-1){//插入位置非法
return 0;
} else {
s=(LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
return 1;
}
}
//删除元素
int Delete_LinkList(LinkList *L, int i, ElemType *e)
{
int j;
LinkList p, q;
p = (*L)->next;
j = 1;
while (p && j < i - 1) {
p = p->next;
++j;
}
if (!p || j > i - 1) {
return 0;
} else {
q=p->next;
p->next = q->next;
*e = q->data;
free(q);
return 1;
}
}
//建立线性表
//头插法:
void CreatLinkList(LinkList *L, int n)
{
int i;
LinkList p;
L=(LinkList *)malloc(sizeof(LinkList));
//创建头结点
(*L)->next=NULL;
for(i = n; i > 0; i--) {
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = (*L)->next;
(*L)->next = p;
}
}
//线性表的合并
void Merge_L(LinkList La, LinkList Lb, LinkList *Lc)
{
LinkList pa, pb, pc;
//按值排序的单链表La,Lb,归并为Lc后也按值排序
pa = La->next;
pb = Lb->next;
*Lc = pc = La;//初始化
while (pa&&pb) {//将pa,pa结点按大小依次插入c中
if(pa->data <= pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}else{
pc->next = pb;
pc = pb;
pb = pb->next;
}
pc -> next =pa?pa:pb;//插入剩余值
free(Lb);
}
}