链表 c

来源:互联网 发布:杀师案 知乎 编辑:程序博客网 时间:2024/06/05 07:17
// linkedLinearList.c#include <stdio.h>#include "ds.h"typedef int ElemType;typedef struct LNode{  ElemType data;  struct LNode *next;}LNode, *LinkList;/* InitLinkList*/Status InitList(LinkList *l){  // head point, make l point to it  *l = (LinkList)malloc(sizeof(LNode));  if(!*l)exit(OVERFLOW);  (*l)->next = NULL;  return OK;}/* Args:  l: linked list with head node  i: deliver ith element to e if exists and return OK     else, return ERROR*/Status GetElemLinkList(LinkList l, int i, ElemType *e){  LNode *p = l->next; // point to first node  int j = 1;  while(p && j < i){    p = p->next;    j++;  }  if(!p || j > i)return ERROR;  *e = p->data;  return OK;} // GetElem/* Insert e into l at position i. Args:  l: linked list with head node*/Status InsertLinkList(LinkList l, int i, ElemType e){  LNode *p = l;  int j = 0;  while(p && j < i-1){ // find position i-1    p = p->next;    j++;  }  // j > i-1: make sure, i>=1, if i = 0, return ERROR  if(!p || j > i-1)return ERROR;  LNode *new_node = (LNode *)malloc(sizeof(LNode));  new_node->data = e;  new_node->next = p->next;  p->next = new_node;  return OK;}Status DeleteLinkList(LinkList l, int i, ElemType *e){  LNode *p = l;  int j = 0;  while(p && j < i-1){    p = p->next;    j++;  }// while end  if(!p->next || j > i-1){    return ERROR;  }// if end  LinkList q;  q = p->next;  p->next = q->next;  *e = q->data;  free(q);  return OK;}/* print link list*/Status PrintLinkList(LinkList l){  LinkList p = l->next;  while(p){    printf(" %d ", p->data);    p = p->next;  }  printf("\n");  return OK;}int main(){  // Initial link list  LinkList l;  InitList(&l);  // insert  int j, a[7]={2,6,8,9,11,15,20};  for(j=0; j<6; j++)    InsertLinkList(l, j+1, a[j]);  printf("LinkList l = ");  PrintLinkList(l);  // delete  ElemType tmp;  DeleteLinkList(l, 2, &tmp);  printf("LinkList l = ");  PrintLinkList(l);  printf("Deleted element tmp = ");  printf("%d\n", tmp);}
/* ds.h *//* Some pre define */#ifndef _HS_H#define _HS_H#include <string.h>#include <ctype.h>#include <sys/malloc.h>#include <stdio.h>#include <stdlib.h>/* State code */#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW 0typedef int Status;typedef int Boolean;#endif
./a.out LinkList l =  2  6  8  9  11  15 LinkList l =  2  8  9  11  15 Deleted element tmp = 6
原创粉丝点击