数据结构:不带头结点的单链表
程序员文章站
2024-03-21 14:53:04
...
不带头结点的单链表实现
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define null NULL
typedef int Elemtype;
typedef struct LNode{
Elemtype data;
struct LNode* next;
};
typedef struct LNode Lnode;
typedef struct LNode *LinkList;
bool InitList(LinkList L){
L=null;
return true;
}
bool Empty(LinkList L){
return (L==null);
}
int CreateFromHead(LinkList L){
node *s,*r;
int flag=1;
Elemtype ch;
while(flag){
ch=scanf("%d",&ch);
if(ch!=9999){
s=(node*)malloc(sizeof(node));
if(s==null){
return ERROR;
}
r=L;
L=s;
s->next=r;
}
else{
break;
}
}
return OK;
}
int CreateFromTail(LinkList L){
node *r,*s;
int flag;
int number=1;
Elemtype ch;
while(flag){
ch=scanf("%d",&ch);
if(ch!=9999){
s=(node*)malloc(sizeof(node));
if(s==null){
return ERROR;
}
if(number==1){
L=s;
r=L;
}
r->next=s;
s->next=null;
r=s;
}
else{
r->next=null;
break;
}
}
}
int GetElem(LinkList L,int i){
node *p;
int j=1;
if(i<1){
return ERROR;
}
p=L;
while(L&&j<i){
p=p->next;
j++;
}
if(L==null){
return ERROR;
}
return OK;
}
int LocaElem(LinkList L,Elemtype e){
node *p;
p=L;
while(p&&(p->data!=e)){
p=p->next;
}
if(p==null){
return ERROR;
}
return OK;
}
int InsertElem(LinkList L,int i,Elemtype e){
node *pre,r;
int j=1;
if(i<1){
return ERROR;
}
pre=L;
while(pre&&j<i-1){
pre=pre->next;
j++;
}
if(pre==null){
return ERROR;
}
r=(Lnode*)malloc(sizeof(Lnode));
r->next=pre->next;
pre->next=r;
r->data=e;
return OK;
}
int DelElem(LinkList L,int i){
node *pre=L;
int j=0;
while(pre!=null&&j<i-1){
pre=pre->next;
j++;
}
if(pre==null){
return ERROR;
}
if(pre->next==null){
return ERROR;
}
node *Tem;
Tem=pre->next;
pre->next=Tem->next;
free(Tem);
return OK;
}
//链表逆序 参考头插法建表,注意此时移动的是L,L不断向前移动
//main()
int main(int argc, char *argv[])
{
LinkList L;//
return 0;
}
上一篇: 22.括号生成