S
sugaray
i'm learning data structure in advance by myself, here's my linked
list code, i don't know what's wrong with my code or just my
understanding not right.
#include <stdio.h>
#include <stdlib.h>
typedef struct link {
int data;
struct link *next;
}Link;
typedef enum {SUCCESS,ERROR,FAILURE,FATAL} Status;
void error(const char *msg) {
fprintf(stderr,"%s\n",msg);
exit(ERROR);
}
void usage(void) {
fprintf(stderr,"usage:\n\t%s n\n");
exit(FAILURE);
}
Link *CreateLink(Link *head,int data) {
head->data=data;
head->next=NULL;
return head;
}
Link *AppendLink(Link *head,int data) {
Link *p=head;
Link *pNew=(Link *)malloc(sizeof(Link));
pNew->data=data;
pNew->next=NULL;
p->next=pNew;
p=pNew;
return p;
}
size_t LinkSize(Link *head) {
size_t size=0;
Link *p=head;
while(p!=NULL) {
p=p->next;
size++;
}
return size;
}
Status InsertLink(Link *head,size_t index,int data) {
Link *p=head;
Link *pNew;
size_t r=0;
while(p && r<index-1) {
p=p->next;
r++;
}
if(!p || r>index-1) return FAILURE;
pNew=(Link *)malloc(sizeof(Link));
pNew->data=data;
pNew->next=p->next;
p->next=pNew;
return SUCCESS;
}
void DisplayLink(Link *head) {
Link *p=head;
while(p!=NULL) {
printf("%d\n",p->data);
p=p->next;
}
}
Status DeleteLink(Link *head,size_t index) {
Link *p=head;
Link *tmp;
size_t r=0;
while(p && r<index-1) {
p=p->next;
r++;
}
if(!(p->next) || r>index-1) return FAILURE;
tmp=p->next;
p->next=tmp->next;
free(tmp);
return SUCCESS;
}
size_t LocateElement(Link *head,int data) {
Link *p=head;
size_t location=0;
while(p!=NULL && (p->data)!=data) {
p=p->next;
location++;
}
return location;
}
void FreeLink(Link *head) {
Link *p;
while(head!=NULL) {
p=head;
head=head->next;
free(p);
}
}
int main(int argc,char *argv[])
{
int data,n,i;
Link *head,*pHead;
pHead=head=(Link *)malloc(sizeof(Link));
if(argc<2) error("oops!");
n=atoi(argv[1]);
scanf("%d",&data);
pHead=CreateLink(head,data);
for(i=0;i<n-1;++i) {
scanf("%d",&data);
AppendLink(pHead,data);
}
printf("#################\n");
DisplayLink(pHead);
FreeLink(pHead);
return 0;
}
list code, i don't know what's wrong with my code or just my
understanding not right.
#include <stdio.h>
#include <stdlib.h>
typedef struct link {
int data;
struct link *next;
}Link;
typedef enum {SUCCESS,ERROR,FAILURE,FATAL} Status;
void error(const char *msg) {
fprintf(stderr,"%s\n",msg);
exit(ERROR);
}
void usage(void) {
fprintf(stderr,"usage:\n\t%s n\n");
exit(FAILURE);
}
Link *CreateLink(Link *head,int data) {
head->data=data;
head->next=NULL;
return head;
}
Link *AppendLink(Link *head,int data) {
Link *p=head;
Link *pNew=(Link *)malloc(sizeof(Link));
pNew->data=data;
pNew->next=NULL;
p->next=pNew;
p=pNew;
return p;
}
size_t LinkSize(Link *head) {
size_t size=0;
Link *p=head;
while(p!=NULL) {
p=p->next;
size++;
}
return size;
}
Status InsertLink(Link *head,size_t index,int data) {
Link *p=head;
Link *pNew;
size_t r=0;
while(p && r<index-1) {
p=p->next;
r++;
}
if(!p || r>index-1) return FAILURE;
pNew=(Link *)malloc(sizeof(Link));
pNew->data=data;
pNew->next=p->next;
p->next=pNew;
return SUCCESS;
}
void DisplayLink(Link *head) {
Link *p=head;
while(p!=NULL) {
printf("%d\n",p->data);
p=p->next;
}
}
Status DeleteLink(Link *head,size_t index) {
Link *p=head;
Link *tmp;
size_t r=0;
while(p && r<index-1) {
p=p->next;
r++;
}
if(!(p->next) || r>index-1) return FAILURE;
tmp=p->next;
p->next=tmp->next;
free(tmp);
return SUCCESS;
}
size_t LocateElement(Link *head,int data) {
Link *p=head;
size_t location=0;
while(p!=NULL && (p->data)!=data) {
p=p->next;
location++;
}
return location;
}
void FreeLink(Link *head) {
Link *p;
while(head!=NULL) {
p=head;
head=head->next;
free(p);
}
}
int main(int argc,char *argv[])
{
int data,n,i;
Link *head,*pHead;
pHead=head=(Link *)malloc(sizeof(Link));
if(argc<2) error("oops!");
n=atoi(argv[1]);
scanf("%d",&data);
pHead=CreateLink(head,data);
for(i=0;i<n-1;++i) {
scanf("%d",&data);
AppendLink(pHead,data);
}
printf("#################\n");
DisplayLink(pHead);
FreeLink(pHead);
return 0;
}