線性鏈表的c語言實現

來源:互聯網
上載者:User

標籤:線性鏈表   link_list   c語言   

#include<stdio.h>

#include<stdlib.h>

typedef int Status;

typedef int Elemtype;

typedef struct LNode{

Elemtype data;

struct LNode *next;

}*LinkList;


Status InitList(LinkList &L){

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;

return 1;

}


Status DestoryList(LinkList &L){

LNode *p,*q;

p=L;

while(p->next){

q=p->next;

free(p);

p=q;

}

return 1;

}


Status IsListEmpty(LinkList &L){

if(!L->data) return 1;

return 0;

}


Status ListLength(LinkList &L){

LNode *p;

p=L;

int i=0;

while(p->next){

p=p->next;

i++;

}

return i;

}


Status GetElem(LinkList &L,int i,Elemtype &e){

LNode *p;

int j=0;

p=L;

while(p->next&&j<i-1){

p=p->next; 

j++;

}

if(!(p->next)||j>i-1) return 0;

e=p->data;

return 1;

}


Status LocateElem(LinkList &L,Elemtype e){

LNode *p;

p=L;

int i=0;

while(p->next){

i++;

if(p->data==e) 

return i;

p=p->next;

}

return 0;

}


Status PriorElem(LinkList &L,Elemtype cur_e,Elemtype &pre_e){

LNode *p,*q;

p=L;

int i=0;

while(p->next){

q=p;

i++;

p=p->next;

if(p->data==cur_e) {

q->data=pre_e;

return 1;

}

}

return 0;

}


Status NextElem(LinkList &L,Elemtype cur_e,Elemtype &next_e){

LNode *p;

p=L;

int i=0;

while(!p->next){

i++;

if(p->data==cur_e){

p->next->data=next_e;

return 1;

}

p=p->next;

}

return 0;

}


Status Listsert(LinkList &L,int i,Elemtype e){

LNode *p;

int j=0;

p=L;

while(p&&j<i-1){

p=p->next; 

j++;

}

if(!p||j>i-1) return 0;

LNode *s;

s=(LinkList)malloc(sizeof(LNode));

s->data=e; s->next=p->next; 

p->next=s;

return 1;

}


Status ListDelete(LinkList &L,int i,Elemtype &e){

LNode *p,*q;

int j=0;

p=L;

while(p->next&&j<i-1){

p=p->next; 

j++;

}

if(!(p->next)||j>i-1) return 0;

q=p->next; p->next=q->next;

e=q->data; free(q);

return 1;

}


Status PrintList(LinkList &L){

LNode *p;

p=L;

while(p->next){

p=p->next;

printf("%d\n",p->data);

}

return 1;

}




int main(){

LinkList l;

InitList(l);

int set,isclose,locate;

Elemtype e,cur_e,pre_e,next_e;

/*student student[10];

for(int i=0;i<2;i++){

scanf("%s %d",student[i].name,&student[i].score);

Push(s,student[i]);

}

PrintStack(s);

*/

while(1){

set=0;

printf(" 1.插入元素\n 2.刪除指定位置元素並輸出\n 3.輸出鏈表的長度\n 4.銷毀鏈表\n 5.在指定元素前插入一個元素 \n 6.查詢該鏈表是否為空白 \n 7.輸出位置元素\n 8.輸出整個鏈表中的所有元素\n 9.建立鏈表(在銷毀後重建)\n");

scanf("%d",&set);

switch(set){

case 1:printf("請輸入元素及要插入的位置,用空格分隔\n");scanf("%d %d",&e,&locate);if(Listsert(l,locate,e)) printf("插入成功\n");else printf("插入失敗\n"); break;

case 2:printf("請輸入要刪除的位置\n");scanf("%d",&locate);if(ListDelete(l,locate,e))printf("%d\n",e);else printf("鏈表裡無元素\n");break;

case 3:printf("%d\n",ListLength(l));break;

case 4:if(DestoryList(l)) printf("銷毀成功\n");break;

case 5:printf("請輸入指定的元素和要插入的元素\n");scanf("%d %d",&cur_e,&pre_e); if(PriorElem(l,cur_e,pre_e)) printf("插入成功\n");break;

case 6:if(IsListEmpty(l)) printf("鏈表為空白\n"); else printf("鏈表不為空白\n");break;

case 7:printf("請輸入要輸出的位置\n");scanf("%d",&locate);if(GetElem(l,locate,e))printf("%d\n",e);else printf("鏈表裡無元素\n");break;

case 8:PrintList(l);break;

case 9:InitList(l);break;

}

printf("結束輸入0\n");

scanf("%d",&isclose);

if(!isclose) break;

}

return 0;

}


本文出自 “zjwzjw369” 部落格,謝絕轉載!

線性鏈表的c語言實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.