很久没有写c了,都已经忘的差不多了。下决心从今天开始每天用c练习下数据结构。现在感觉底层的东西太重要。下面是我写的c:希望csdn的高手们能够指点指点,哪里算法可以改进改进的。谢谢了!
#include "stdio.h"
#define TYPE struct student
#define LEN sizeof(struct student)
#define NULL 0
struct student{
int no;
TYPE *next;
};
TYPE *create(int n){
TYPE *header,*ps,*p;
int i;
p = (TYPE *) malloc(LEN);
for(i=0;i<n;i++) {
p = (TYPE *) malloc(LEN);
printf("please input the no:");
scanf("%d",&p->no);
if(i==0) {
header = ps = p;
}
ps->next = p;
p->next = NULL;
ps=p;
}
return header;
}
int getLength(TYPE *list) {
TYPE *ps;
int length=0;
ps=list;
while(ps->next != NULL) {
length++;
ps=ps->next;
}
return length +1;
}
TYPE *insert(TYPE *list, int n) {
TYPE *header,*ps,*p;
header=ps=list;
while(ps!=NULL) {
n--;
if(n==0) {
p=(TYPE *) malloc(LEN);
printf("please input the no:");
scanf("%d",&p->no);
p->next=ps->next;
ps->next=p;
}
ps=ps->next;
}
return header;
}
TYPE *removeByPosition(TYPE *list,int n) {
TYPE *header,*ps;
int i= 0;
header = ps = list;
if(n>getLength(ps) || n<=0) {
printf("the wrong position!");
getch();
exit(0);
}
while(ps!=NULL) {
i++;
if(i==n) {
ps->next=ps->next->next;
}
ps=ps->next;
}
return header;
}
TYPE *removeByPositionAndValue(TYPE *list,int n,int value) {
TYPE *header,*ps;
int i= 0;
header = ps = list;
if(n>getLength(ps) || n<=0) {
printf("the wrong position!");
getch();
exit(0);
}
while(ps!=NULL) {
i++;
if(i==n && ps->no == value) {
ps->next=ps->next->next;
}
ps=ps->next;
}
return header;
}
TYPE *print(TYPE *list) {
while(list!=NULL) {
printf("%-4d",list->no);
list=list->next;
}
}
main() {
TYPE *list = create(4);
/*printf("%d",getLength(list));
printf("%d",getLength(insert(list,2)));
printf("%d",getLength(removeByPosition(insert(list,2),1)));*/
printf("%d",getLength(removeByPositionAndValue(insert(list,2),1,3)));
print(list);
getch();
}
#include "stdio.h"
#define TYPE struct student
#define LEN sizeof(struct student)
#define NULL 0
struct student{
int no;
TYPE *next;
};
TYPE *create(int n){
TYPE *header,*ps,*p;
int i;
p = (TYPE *) malloc(LEN);
for(i=0;i<n;i++) {
p = (TYPE *) malloc(LEN);
printf("please input the no:");
scanf("%d",&p->no);
if(i==0) {
header = ps = p;
}
ps->next = p;
p->next = NULL;
ps=p;
}
return header;
}
int getLength(TYPE *list) {
TYPE *ps;
int length=0;
ps=list;
while(ps->next != NULL) {
length++;
ps=ps->next;
}
return length +1;
}
TYPE *insert(TYPE *list, int n) {
TYPE *header,*ps,*p;
header=ps=list;
while(ps!=NULL) {
n--;
if(n==0) {
p=(TYPE *) malloc(LEN);
printf("please input the no:");
scanf("%d",&p->no);
p->next=ps->next;
ps->next=p;
}
ps=ps->next;
}
return header;
}
TYPE *removeByPosition(TYPE *list,int n) {
TYPE *header,*ps;
int i= 0;
header = ps = list;
if(n>getLength(ps) || n<=0) {
printf("the wrong position!");
getch();
exit(0);
}
while(ps!=NULL) {
i++;
if(i==n) {
ps->next=ps->next->next;
}
ps=ps->next;
}
return header;
}
TYPE *removeByPositionAndValue(TYPE *list,int n,int value) {
TYPE *header,*ps;
int i= 0;
header = ps = list;
if(n>getLength(ps) || n<=0) {
printf("the wrong position!");
getch();
exit(0);
}
while(ps!=NULL) {
i++;
if(i==n && ps->no == value) {
ps->next=ps->next->next;
}
ps=ps->next;
}
return header;
}
TYPE *print(TYPE *list) {
while(list!=NULL) {
printf("%-4d",list->no);
list=list->next;
}
}
main() {
TYPE *list = create(4);
/*printf("%d",getLength(list));
printf("%d",getLength(insert(list,2)));
printf("%d",getLength(removeByPosition(insert(list,2),1)));*/
printf("%d",getLength(removeByPositionAndValue(insert(list,2),1,3)));
print(list);
getch();
}