資料結構那點事--線性表(連結串列)
阿新 • • 發佈:2018-12-11
#include<iostream> #include<stdlib.h> using namespace std; //鏈式線性表的儲存結構 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node; typedef struct Node *LinkList;//定義LinkList //初始化線性表(連結串列)頭插法 Status StartHeadElem(LinkList *L,int m) { LinkList p; int i; *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; for(int i=0;i<m;i++) { p=(LinkList)malloc(sizeof(Node)); cin>>p->data; p->next=(*L)->next; (*L)->next=p; } } //初始化線性表(連結串列)尾插法 Status StartTailElem(LinkList *L,int m) { LinkList p,r; int i; *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; r=(*L); for(int i=0;i<m;i++) { p=(Node *)malloc(sizeof(Node)); cin>>p->data; r->next=p;//指標的指向 r=p;//變數之間的交換 } r->next=NULL; return OK; } //獲得元素操作 Status GetElem(LinkList L ,int i,ElemType *e) { int j; LinkList p; p=L->next; j=1; while(p&&j<i) { p=p->next; j++; } if(j>i||!p) { return ERROR; } *e =p->data; return OK; } //插入元素操作 Status ListInsert(LinkList *L,int i,ElemType e) { int j; LinkList p,s; p=*L; j=1; while(p&&j<i) { p=p->next; j++; } if(j>i||!p) { return ERROR; } s=(LinkList)malloc(sizeof(Node)); s->data=e; s->next=p->next; p->next=s; return OK; } //刪除元素操作 Status ListDelete(LinkList *L,int i,ElemType *e) { int j; LinkList p,q; p=*L; j=1; while(p&&j<i) { p=p->next; j++; } if(j>i||!p) { return ERROR; } q=p->next; *e=q->data; p->next=q->next; free(q); return OK; } Status ListDisplay(LinkList *L) { LinkList p; p=(*L)->next; if(!p) { return ERROR; } while(p) { cout<<p->data<<"->"; p=p->next; } cout<<endl; return OK; } int main() { Node *n; int m; cout<<"輸入初始化元素的數目"<<endl; cin>>m; cout<<"輸入初始化元素"<<endl; StartTailElem(&n,m); cout<<"輸入獲得元素的序號"<<endl; int e,num; cin>>num; GetElem(n,num,&e); cout<<"該序號的元素:"<<e<<endl; int numb,nums; cout<<"輸入插入元素的序號和數"<<endl; cin>>numb>>nums; ListInsert(&n,numb,nums); cout<<"輸入刪除元素的序號"<<endl; int es,numss; cin>>numss; ListDelete(&n,numss,&es); cout<<"該序號的元素:"<<es<<endl; ListDisplay(&n); }