1. 程式人生 > >線性表在鏈式儲存結構下的基本操作

線性表在鏈式儲存結構下的基本操作

原始碼:

#include<iostream>

#include<cstring>

#define OK 1

#define ERROR 0

#define OVERFLOW -1

using namespace std;

typedef int Elemtype;

typedef struct LNode {

Elemtype date;

struct LNode *next;

} LNode,*linkList;

int inti(linkList &l) {

l= new LNode;

l->next=NULL;

return OK;

}

void creat(linkList &l) {

int n;

linkList p;

printf("2. 請輸入連結串列的長度:");

scanf("%d",&n);

cout<<"  請輸入值:";

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

p = new LNode;

cin>>p->date;

p->next=l->next;

l->next=p;

}

}

void trave (linkList l) {

linkList p;

int len=0;

p=l->next;

cout<<"  連結串列的值為:";

while(p!=NULL) {

cout<<p->date<<"  ";

p=p->next;

len++;

}

cout<<endl<<"  連結串列的長度為:"<<len<<endl;

}

void getelem(linkList l) {

linkList p;

int temp;

int flag=0;

int len=1;

printf("3. 請輸入您想要讀取的值:");

scanf("%d",&temp);

p=l->next;

while(p!=NULL) {

if(p->date==temp) {

flag=1;

cout<<"數字"<<temp<<"在第"<<len<<"位"<<endl;

break;

}

p=p->next;

len++;

}

if(flag==0)

printf("  此值在連結串列中不存在\n");

}

void insert(linkList l) {

linkList p,temp;

p=l;

temp = new LNode;

int in;

cout<<"4. 請輸入要插入的位置:";

cin>>in;

cout<<"  請輸入插入的數字:";

cin>>temp->date;

for(int i=0; i<in-1; i++) {

p=p->next;

if(p==NULL) {

printf("  錯誤 \n");

return ;

}

}

temp->next = p->next;

p->next=temp;

}

void dele(linkList &l) {

linkList p,temp;

int n;

cout<<"5. 請輸入你想要刪除的元素:";

cin>>n;

p=l;

while(p->next->date!=n ) {

p=p->next;

if(p->next==NULL) {

cout<<"元素不存在"<<endl;

return ;

}

}

temp=p->next;

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

delete[] temp;

}

void merge(linkList &la,linkList &lb,linkList &lc) {

linkList pa,pb,pc;

pa=la->next;

pb=lb->next;

lc=la;

pc = lc;

while(pa && pb) {

if(pa->date<=pb->date) {

pc->next =pa;

pc=pa;

pa=pa->next;

} else {

pc->next=pb;

pc=pb;

pb=pb->next;

}

}

pc->next=pa? pa:pb;

delete lb;

}

int main() {

linkList la,lb,lc;

if(inti(la))

cout<<"1. 初始化成功"<<endl<<endl;

creat(la);

trave(la);

cout<<endl;

getelem(la);

cout<<endl;

insert(la);

trave(la);

cout<<endl;

dele(la);

trave(la);

cout<<endl;

inti(lb);

creat(lb);

cout<<endl;

merge(la,lb,lc);

cout<<"6. 歸併排序:"<<endl;

trave(lc);

cout<<endl;

return 0;

}

執行結果: