連結串列的四種基本的演算法演示
阿新 • • 發佈:2018-12-18
/* 連結串列的四種基本的操作 其他的演算法都可以根據這些來實現的 */ # include <bits/stdc++.h> using namespace std; typedef struct NODE { struct NODE *pnext; int data; }NODE,*PNODE; PNODE create_list (void); //建立一個連結串列 void insert_list (PNODE phead,int pos,int val); //插入一個節點 void trave_list (PNODE phead); //遍歷整個連結串列 void delete_list(PNODE phead,int pos);// 刪除一個節點 int main ( ) { PNODE phead; phead = create_list(); trave_list (phead); insert_list(phead,4,5); delete_list(phead,4); trave_list (phead); return 0; } PNODE create_list (void) { PNODE phead = (PNODE)malloc (sizeof(NODE)); int n; cin>>n; PNODE ptail=phead; for (int i=1;i<=n;++i) { PNODE pnew=(PNODE)malloc(sizeof(NODE)); int val; cin>>val; pnew->data=val; pnew->pnext=NULL; ptail->pnext=pnew; ptail=pnew; } return phead; } void trave_list (PNODE phead) { PNODE p=phead->pnext; while (NULL!=p) { printf ("%d ",p->data); p=p->pnext; } printf ("\n"); } void insert_list (PNODE phead,int pos,int val) { PNODE p= phead->pnext; for (int i=1;i<pos;++i) p=p->pnext; PNODE pnew=(PNODE)malloc(sizeof(NODE)); pnew->data=val; pnew->pnext=p->pnext; p->pnext=pnew; } void delete_list(PNODE phead,int pos) { PNODE p= phead->pnext; for (int i=1;i<pos-1;i++) p=p->pnext; PNODE t=p->pnext; p->pnext=p->pnext->pnext; free(t); }