本人根据严蔚敏版《数据结构》进行编写,如有不对的地方请指出,谢谢
#include <stdio.h>
#include <stdlib.h>
#define ok 1;
#define error 0;
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;
int lnitlist (linklist *l) {//创建链表
*l=(linklist)malloc(sizeof(lnode));
if(!(*l)) {
return error;
}
else {
(*l)->next=NULL;
}
return ok;
}
int numlink(linklist l) {//返回个数
if(!l) return error;
int num=0;
linklist p;
p=l;
while(p) {
p=p->next;
num+=1;
}
return num-1;
}
int deletelink(linklist l,int i) {//删除
if(!l) return error;
linklist p,q;
int j=1;
p=l;
if(i>numlink(l)) return error;
while(p->next&&j<i) {
p=p->next;
j++;
}
if(!(p->next)||j>i) return 0;
q=p->next;
p->next=q->next;
free(q);
return ok;
}
int listinsert (linklist *l,int i,int e) {//插入
linklist p,s;
p=*l;
int j=1;
while(p&&j<i) {
p=p->next;
j++;
}
if(!p||j>i) {
return error;
} else {
s=(linklist) malloc(sizeof(lnode));
s->data=e;
s->next=p->next;
p->next=s;
}
return ok;
}
int listtraverse(linklist l) {//输出
linklist p=l->next;
while (p) {
printf("%3d",p->data);
p=p->next;
}
printf("\n");
return ok;
}
int main(int argc, const char * argv[]) {
linklist l;
lnitlist(&l);
int p;
for(p=1;p<=5;p++) {
listinsert(&l,1,p);
}
listinsert(&l, 4,4);
deletelink(l,2);
printf("%d\n",numlink(l));
listtraverse(l);
return 0;
}
**************************************************************************
//下面是我的个人理解
#include <stdio.h>
#include <stdlib.h>
#define ok 1
#define error 0;
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist;
int initlinklist(linklist *l) {//创建链表
*l=(linklist)malloc(sizeof(lnode));
if(!(*l)) {
return error;
}else {
(*l)->next=NULL;
}
return ok;
}
int scanf_(linklist l,int n) {//输入
if(!l) return error;
linklist p;
int i,j;
for(i=0;i<n;i++) {
p=(linklist)malloc(sizeof(lnode));
scanf("%d",&j);
p->data=j;
l->next=p;
l=p;
}
return ok;
}
int printf_(linklist l) {//输出
while(l->next) {
l=l->next;
printf("%3d",l->data);
}
printf("\n");
return ok;
}
int deletelinklist(linklist l,int n) {//删除
if(!l) return error;
int i;
for(i=0;i<n-1;i++) l=l->next;
linklist p;
p=(linklist)malloc(sizeof(lnode));
p=l->next->next;
l->next=p;
return ok;
}
int main(int argc, const char * argv[]) {//调试
linklist l=NULL;
initlinklist(&l);
int i;
scanf("%d",&i);
scanf_(l,i);
deletelinklist(l, 2);
printf_(l);
return 0;
}
感谢阅读,谢谢 orz