資料結構與演算法——單鏈表(一)
阿新 • • 發佈:2018-11-07
單鏈表的頭插法,插入時就是逆序。 InsertList()還不完善。
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 typedef int Status ; typedef int Elemtype ; typedef struct Node{ Elemtype data;//資料域 struct Node *next;//指標域 }Node; typedef struct Node* LinkList;//LinkList為指向Node的指標。 /* *函式宣告 */ Status FrontInsertList(LinkList &L); Status InsertList(LinkList &L,int i,Elemtype e); void PrintList(LinkList L); int main(){ Elemtype e; int i; LinkList L; L=NULL; if(FrontInsertList(L)) PrintList(L);//列印單鏈表 printf("請輸入要插入的元素和位置:\n"); scanf("%d %d",&e,&i); if(InsertList(L, i,e)) { printf("\n\n新的連結串列為:\n"); PrintList(L); } return 0; } Status FrontInsertList(LinkList &L){//頭插法 LinkList p,q;//輸入元素的新結點 int n; q=(LinkList)malloc(sizeof(Node)); q=NULL; printf("請輸入n和n個數據元素:\n"); scanf("%d",&n); while(n--) { p=(LinkList)malloc(sizeof(Node)); p->next=q; q=p; scanf("%d",&p->data);//頭插法為逆值 } while(p->next)//遍歷到第一個結點 { p=p->next; } L=q; printf("連結串列輸入結束(END)\n"); return OK; } /* *****給連結串列的第i個位置插入************** */ Status InsertList(LinkList &L,int i,Elemtype e) { LinkList p,s; int j=1; p=L; s=(LinkList)malloc(sizeof(Node)); while(p&&j<i)//尋找第i個節點,有一個為假退出,NUll時最後一個。 { p=p->next; j++; } if(!p||j>i)//最後一個還沒有或者找不到 return ERROR; s->data=e; s->next=p->next; p->next=s; return OK; } /* *****************列印連結串列*********************** * **/ void PrintList(LinkList L) { LinkList temp; temp=L; printf("\n連結串列存入的值為:\n"); while(temp!=NULL) //非空表 { printf("%2d",temp->data);//輸出連結串列節點的值 temp=temp->next; } printf("\n連結串列列印結束!!\n"); }