实现单链表的各种运算
编写一个程序2-1.CPP,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:
(1)初始化单链表L
(2)依次采用尾插法插入a,b,c,d,e元素
(3)输出单链表L:
(4)输出单链表L长度
(5)判断单链表L是否为空
(6)输出单链表L的第3个元素
(7)输出元素a的位置
(8)在第4个元素位置上插入f元素
(9)输出单链表L:
(10)删除L的第3个元素
(11)输出单链表L:
(12)释放单链表L
#include<stdio.h> typedef struct _NODE_ { char data;//数据域 _NODE_ * next;//指针域 }Node,*pNode;//定义指针类型 pNode Head = NULL;//头指针 pNode Tail = NULL;//尾指针 //初始化单链表 void InitpNode(pNode p){ p=new Node(); //if(!p)exit(OVERFLOW); p->next=NULL; } //判断链表是否为空 int isEmpty(pNode pNodeTemp){ pNodeTemp=new Node(); Node *p; int j=0; p=pNodeTemp->next; if(p==NULL){ return 0; } else return 1; } //释放 //尾插法插入元素 void CreateLinkNode(char a) { pNode pNodeTemp = new Node;//再new一个新的结点 if(pNodeTemp==NULL) { return ; } pNodeTemp->data = a; pNodeTemp->next = NULL; if(Head==NULL) { Head=Tail = pNodeTemp; } else { Tail->next = pNodeTemp; Tail = pNodeTemp; } } //链表长度 void getLength(){ int Count=0; pNode pNodeTemp = Head; while(pNodeTemp!=NULL) { Count++; //printf("%c ",pNodeTemp->data); pNodeTemp = pNodeTemp->next; } printf("(4)链表长度为%d\n",Count); } //获取第i个元素 pNode getElem(int i){ int a=i; pNode pNodeTemp = Head; while(i-1) { pNodeTemp = pNodeTemp->next; i--; } printf("(6)第%d个元素为 %c \n",a,pNodeTemp->data); return pNodeTemp; } //元素e的位置 void getPos(char e){ pNode pNodeTemp = Head; int Pos=0; while(pNodeTemp) { Pos++; if(pNodeTemp->data == e) { printf("(7)元素%c的位置为%d\n",e,Pos); break; } pNodeTemp = pNodeTemp->next; } } //在第三个位置插入元素f void insertElem(int n,char c){ pNode pNodeTemp = Head; for(int k=0;k<n-2;k++) { pNodeTemp = pNodeTemp->next; } pNode pNodeNew = new Node; if(pNodeNew==NULL) { return ; } int count=0; pNodeNew->data = c; pNodeNew->next = NULL; pNodeNew->next = pNodeTemp->next; pNodeTemp->next = pNodeNew; count++; } //打印元素 void print(pNode pNodeTemp){ pNodeTemp= Head; while(pNodeTemp!=NULL) { printf("%c ",pNodeTemp->data); pNodeTemp = pNodeTemp->next; } printf("\n"); } //删除第i个元素 void dele(int i,pNode pNodeTemp){ Node *p ,*q; p=getElem(i-1); q=p->next; p->next=q->next; delete q; } void main() { pNode pNodeTemp; printf("(1)初始化单链表:\n"); InitpNode(pNodeTemp); printf("(2)依次用尾插法插入a,b,c,d,e: \n"); char temp = 'a'; for(int i=0;i<5;i++) { CreateLinkNode(temp+i); } printf("(3)输出单链表: "); print(pNodeTemp); getLength(); printf("(5)单链表 %s\n", isEmpty(pNodeTemp)==0 ?"空":"非空"); getElem(4); getPos('a'); printf("(8)在第三个位置上插入元素f\n"); insertElem(3,'f'); printf("(9)输出单链表h:"); print(pNodeTemp); printf("(10)删除单链表的第4个元素:\n"); dele(4,pNodeTemp); printf("(11)输出单链表: "); print(pNodeTemp); printf("(12)释放单链表: "); } //2.5实验二 #include<stdio.h> typedef struct _NODE_ { char data;//数据域 _NODE_ * next;//指针域 }Node,*pNode;//定义指针类型 pNode Head = NULL;//头指针 pNode Tail = NULL;//尾指针 //初始化单链表 void InitpNode(pNode &p){ p=new Node(); //if(!p)exit(OVERFLOW); p->next=NULL; } //创建单链表 void CreateLinkNode(char a) { pNode pNodeTemp = new Node; if(pNodeTemp==NULL) { return ; } pNodeTemp->data = a; pNodeTemp->next = NULL; if(Head==NULL) { Head=Tail = pNodeTemp; } else { Tail->next = pNodeTemp; Tail = pNodeTemp; } } //链表长度 void getLength(){ int Count=0; pNode pNodeTemp = Head; while(pNodeTemp!=NULL) { Count++; printf("%c ",pNodeTemp->data); pNodeTemp = pNodeTemp->next; } printf("链表长度为%d\n",Count); } //获取第i个元素 void getElem(int i){ pNode pNodeTemp = Head; while(i-1) { pNodeTemp = pNodeTemp->next; i--; } printf("第%d个元素为 %c \n",i+1,pNodeTemp->data); } //元素e的位置 void getPos(char e){ pNode pNodeTemp = Head; int Pos=0; while(pNodeTemp) { Pos++; if(pNodeTemp->data == e) { printf("%c的位置为%d\n",e,Pos); break; } pNodeTemp = pNodeTemp->next; } } //在第三个位置插入元素f void insertElem(){ pNode pNodeTemp = Head; for(int k=0;k<2;k++) { pNodeTemp = pNodeTemp->next; } pNode pNodeNew = new Node; if(pNodeNew==NULL) { return ; } int count=0; pNodeNew->data = 'f'; pNodeNew->next = NULL; pNodeNew->next = pNodeTemp->next; pNodeTemp->next = pNodeNew; count++; } void main() { char temp = 'a'; for(int i=0;i<5;i++) { CreateLinkNode(temp+i); } getLength(); getElem(2); getPos(2); pNode pNodeNew = Head; pNode pNodeTemp= Head; while(pNodeTemp!=NULL) { printf("%c ",pNodeTemp->data); pNodeTemp = pNodeTemp->next; } pNodeTemp = Head->next; pNodeTemp->next = pNodeTemp->next->next; pNodeTemp = Head; printf("\n"); while(pNodeTemp!=NULL) { printf("%c ",pNodeTemp->data); pNodeTemp = pNodeTemp->next; } while(Head!=Tail) { pNodeTemp = Head; Head = Head->next; delete pNodeTemp; } delete Head; }

浙公网安备 33010602011771号