/* 線性表的鏈式存儲之單鏈表 */ #include<stdio.h> #include<stdlib.h> typedef struct LNode{ int data; struct LNode * next; }LNode,*LinkList; //頭插法,與輸入順序相反 LinkList CreateList1(LinkList L){ LNode *s;int x; L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; scanf("%d",&x); while(x!=9999){ s = (LNode*)malloc(sizeof(LNode)); s->data = x; s->next = L->next; L->next = s; scanf("%d",&x); } return L; } //尾插法,與輸入順序一致 LinkList CreateList2(LinkList L){ LNode *s;int x;LNode *r; L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; r = L; scanf("%d",&x); while(x!=9999){ s = (LNode*)malloc(sizeof(LNode)); s->data = x; s->next = r->next; r->next = s; r = r->next; scanf("%d",&x); } return L; } //按序號查找結點值 LNode *GetElem(LinkList L,int i){ int j=1; LNode *p = L->next; if(i==0) return L; if(i<1) return NULL; while(p&&j!=i){ p = p->next; j++; } return p; } //按值查找表結點 LNode *LocateElem(LinkList L,int e){ LNode *p = L->next; while(p&&p->data!=e){ p = p->next; } return p; } int length(LinkList L){ int j = 1; LNode *p = L->next; while(p){ p = p->next; j++; } return j-1; } //刪除結點 bool ListDelete(LinkList &L,int i){ int j = 1; LNode* p = L; LNode* q; if(i<1||i>length(L)) return false; while(p->next&&j<i) { p = p->next; j++; } q = p->next; p->next = q->next; free(q); return true; } //插入結點 bool ListInsert(LinkList &L,int i,int e) { int j=1; LNode *p = L; if(i<1||i>length(L)+1) return false; LNode *s; s = (LinkList)malloc(sizeof(LNode)); s->data = e; while(p&&j<i){ p = p->next; j++; } s->next = p->next; p->next = s; return true; } void print(LinkList L){ LNode* p = L->next; while(p){ printf("%d ",p->data); p = p->next; } printf("\n"); } int main(){ //LinkList L = CreateList1(L); LinkList L = CreateList2(L); //LNode* p = LocateElem(L,3); //LNode* p = GetElem(L,3); //if(p) printf("%d\n",p->data); //printf("%d\n",length(L)); print(L); //ListDelete(L,3); ListInsert(L,3,10); print(L); return 0; }