Ps:每段代码中,添加了Solo署名的是博主自己写的,其余来自课本或老师。
typedef struct Node
{
ElemType data;
struct Node *next;
} Node, *LinkList;
InitList(LinkList *L)
{
*L = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
void CreateFromHead(LinkList L)
{
Node *s;
char c;
while((c = getchar()) != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
s->next = L->next;
L->next = s;
}
}
void CreateFromTail()
{
LinkList L;
Node *r, *s;
char c;
L = (Node *)malloc(sizeof(Node));
L->next = NULL;
r = L;
while((c = getchar()) != '$')
{
s = (Node*)malloc(sizeof(Node));
s->data = c;
r->next = s;
r = s;
}
r->next = NULL;
return L;
}
Node * Get(LinkList L, int i)
{
int j;
Node *p;
if(i <= 0) return NULL;
p = L; j = 0;
while((p->next != NULL) && j < i)
{
p = p->next;
j++;
}
if(i==j) return p;
else return NULL;
}
Node * Locate(LinkList, ElemType key)
{
Node p;
p = L->next;
while(p != NULL)
if(p->data != key) p = p->next;
else break;
return p;
}
int ListLength(LinkList)
{
Node *p;
p = L->next;
j = 0;
while(p != NULL)
{
p = p->next;
j++;
}
return j;
}
#define OK 1
#define ERROR 0
void InsList(LinkList, ElemType)
{
Node *pre, *s;
int k;
if(i <= 0) return ERROR;
pre = L; k = 0;
while(pre != NULL && k < i-1)
{
pre = pre->next;
k++;
}
if(pre == NULL || k > i-1)
{
printf("插入位置不合理!");
return ERROR;
}
s = (Node *)malloc(sizeof(Node));
s->data = a;
s->next = pre->next;
pre->next;
pre->next = s;
return OK;
}
int DelList(LinkList L; int i; ElemType *e)
{
Node *pre, *r;
int k;
pre = L; k = 0;
while(pre->next != NULL && k < i-1)
{
pre = pre->next;
k++;
}
if(pre->next == NULL || k > i-1)
{
printf("删除结点位置的i不合理");
return ERROR;
}
r = pre->next;
pre->next = r->next;
*e = r->data;
free(r);
return OK;
}
LinkList MergeLinkList(LinkList LA, LinkList LB)
{
Node *pa, *pb;
LinkList LC;
pa = LA->next;
pb = LB->next;
LC = LA;
LC->next = NULL; r = LC;
while(pa != NULL && pb != NULL)
{
if(pa->data <= pb->data)
{r->next = pa; r = pa; pa = pa->next;}
else {r-next = pb; r = pb; pb = pb->next}
if(pa) r->next = pa;
else r->next = pb;
}
free(LB);
return(LC);
}
int Delsame(LinkList L)
{
Node *pre,*p,*r;
pre = L->next;
p = pre->next;
while(p->next != NULL)
{
if(p->data = pre->data)
{r=p; p=p->next; pre->next = p; free(r)}
else
{pre = p; p = p->next; }
}
return OK;
}
zhihu:Solo | weibo@从流域到海域