#include<iostream>usingnamespace std;#defineMaxSize50#defineElemTypeinttypedefstruct{
ElemType data[MaxSize];int length;} SqList;//初始化voidInitList(SqList &L){
L.length =0;}// 表长intLength(SqList L){return L.length;}//按值查找intLocateElem(SqList L, ElemType e){int index =0;for(int i =0; i < L.length; i ++){if(L.data[i]== e){// 返回位序 非下标
index = i +1;break;}}return index;}// 插入操作boolListInsert(SqList &L,int i, ElemType e){// 插入位置错误if(i <1|| i > L.length +1){returnfalse;}// 线性表已满if( L.length >= MaxSize ){returnfalse;}for(int j = L.length -1; j >= i; j--){
L.data[j +1]= L.data[j];}
L.data[i -1]= e;
L.length ++;returntrue;}// 删除操作boolListDelete(SqList &L,int i, ElemType &e){// 删除位置错误if( i <1|| i > L.length ){returnfalse;}
e = L.data[i -1];for(int j = i; j < L.length; j++){
L.data[j -1]= L.data[j];}
L.length --;returntrue;}// 打印voidPrintList(SqList L){
cout <<"打印序列:";for(int i =0; i < L.length; i++){
cout << L.data[i]<<' ';}
cout << endl;}// 判空boolEmpty(SqList L){return L.length ?true:false;}intmain(){
SqList sqlist;InitList(sqlist);ListInsert(sqlist,1,3);ListInsert(sqlist,2,23);PrintList(sqlist);
ElemType e;ListDelete(sqlist,2, e);PrintList(sqlist);
cout << e << endl;return0;}
线性表链式表示-单链表
#include<iostream>usingnamespace std;#defineElemTypeinttypedefstructLNode{
ElemType data;structLNode*next;} LNode,*LinkList;// 初始化boolInitList(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> next =NULL;returntrue;}// 求表长intLength(LinkList L){int len =0;
LNode *p = L -> next;while( p !=NULL){
p = p -> next;
len ++;}return len;}// 按位查找
LNode *GetElem( LinkList L,int i){
LNode *p = L -> next;int j =1;while(p !=NULL&& j < i){
p = p -> next;
j ++;}return p;}//按值查找
LNode *LocateElem(LinkList L, ElemType e){
LNode *p = L -> next;while(p !=NULL&& p -> data != e){
p = p -> next;}return p;}// 按位插入boolListInsert(LinkList &L,int i, ElemType e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}if(p ==NULL){returnfalse;}
LNode *s =(LNode*)malloc(sizeof(LNode));
s -> data = e;
s -> next = p -> next;
p -> next = s;returntrue;}// 头插法建立单链表
LinkList List_HeaderInsert(LinkList &L){// 头节点
L =(LNode*)malloc(sizeof(LNode));
L -> next =NULL;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> next = L -> next;
L -> next = s;
cin >> e;}return L;}// 尾插法建立单链表
LinkList List_TailInsert(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> next =NULL;
LNode *p = L;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> next =NULL;
p -> next = s;
p = s;
cin >> e;}return L;}// 按位删除boolListDelete(LinkList &L,int i, ElemType &e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}// i 值不合法if(p ==NULL|| p -> next ==NULL){returnfalse;}
LNode *s = p -> next;
e = s -> data;
p -> next = s -> next;free(s);returntrue;}// 打印voidPrintList(LinkList L){
cout <<"打印序列:";while(L !=NULL&& L -> next !=NULL){
L = L -> next;
cout << L -> data <<' ';}
cout << endl;}intmain(){
LinkList L;// 创建// List_HeaderInsert(L);List_TailInsert(L);// 打印PrintList(L);int length =Length(L);
cout <<"链表长度:"<< length << endl;
LNode *item =GetElem(L,2);if(item){
cout << item -> data;}return0;}
线性表链式表示-双链表
#include<iostream>usingnamespace std;#defineElemTypeinttypedefstructLNode{
ElemType data;structLNode*prior;structLNode*next;} LNode,*LinkList;// 初始化boolInitList(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> prior =NULL;
L -> next =NULL;returntrue;}// 求表长intLength(LinkList L){int len =0;
LNode *p = L;while(p -> next !=NULL){
p = p -> next;
len ++;}return len;}// 按位查找
LNode *GetElem( LinkList L,int i){
LNode *p = L -> next;int j =1;while(p !=NULL&& j < i){
p = p -> next;
j ++;}return p;}//按值查找
LNode *LocateElem(LinkList L, ElemType e){
LNode *p = L -> next;while(p !=NULL&& p -> data != e){
p = p -> next;}return p;}// 按位插入boolListInsert(LinkList &L,int i, ElemType e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}if(p ==NULL){returnfalse;}
LNode *s =(LNode*)malloc(sizeof(LNode));
s -> data = e;
s -> prior = p;
s -> next = p -> next;
p -> next = s;if( s -> next ){
s -> next -> prior = s;}returntrue;}// 头插法建立双链表
LinkList List_HeaderInsert(LinkList &L){// 头节点
L =(LNode*)malloc(sizeof(LNode));
L -> prior =NULL;
L -> next =NULL;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> prior = L;
s -> next = L -> next;
L -> next = s;// 不是第一次插入if(s -> next){
s -> next -> prior = s;}
cin >> e;}return L;}// 尾插法建立双链表
LinkList List_TailInsert(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> prior =NULL;
L -> next =NULL;
LNode *p = L;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> prior = p;
s -> next =NULL;
p -> next = s;
p = s;
cin >> e;}return L;}// 按位删除boolListDelete(LinkList &L,int i, ElemType &e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}// i 值不合法if(p ==NULL|| p -> next ==NULL){returnfalse;}
LNode *s = p -> next;
e = s -> data;
p -> next = s -> next;if( s -> next){
s -> next -> prior = p;}free(s);returntrue;}// 打印voidPrintList(LinkList L){
cout <<"打印序列:";while(L !=NULL&& L -> next !=NULL){
L = L -> next;
cout << L -> data <<' ';}
cout << endl;}intmain(){
LinkList L;// 创建List_HeaderInsert(L);// List_TailInsert(L);// 打印PrintList(L);// 删除元素
ElemType e;ListDelete(L,1, e);
cout <<"删除元素:"<< e <<endl;PrintList(L);// 插入元素ListInsert(L,3,44);PrintList(L);
LNode *item =GetElem(L,3);if(item){
cout << item -> data;}return0;}
线性表链式表示-循环双链表
#include<iostream>usingnamespace std;#defineElemTypeinttypedefstructLNode{
ElemType data;structLNode*prior;structLNode*next;} LNode,*LinkList;// 初始化boolInitList(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> prior = L;
L -> next = L;returntrue;}// 求表长intLength(LinkList L){int len =0;
LNode *p = L;while(p -> next !=NULL){
p = p -> next;
len ++;}return len;}// 按位查找
LNode *GetElem( LinkList L,int i){
LNode *p = L -> next;int j =1;while(p !=NULL&& j < i){
p = p -> next;
j ++;}return p;}//按值查找
LNode *LocateElem(LinkList L, ElemType e){
LNode *p = L -> next;while(p !=NULL&& p -> data != e){
p = p -> next;}return p;}// 按位插入boolListInsert(LinkList &L,int i, ElemType e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}if(p ==NULL){returnfalse;}
LNode *s =(LNode*)malloc(sizeof(LNode));
s -> data = e;
s -> prior = p;
s -> next = p -> next;
p -> next = s;if( s -> next != L){
s -> next -> prior = s;}returntrue;}// 头插法建立循环双链表
LinkList List_HeaderInsert(LinkList &L){// 头节点
L =(LNode*)malloc(sizeof(LNode));
L -> prior = L;
L -> next = L;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> prior = L;
s -> next = L -> next;
L -> next = s;// 不是第一次插入if(s -> next != L){
s -> next -> prior = s;}else{
L -> prior = s;}
cin >> e;}return L;}// 尾插法建立循环双链表
LinkList List_TailInsert(LinkList &L){
L =(LNode *)malloc(sizeof(LNode));
L -> prior = L;
L -> next = L;
LNode *p = L;
LNode *s;
ElemType e;
cin >> e;while(e !=9999){
s =(LNode *)malloc(sizeof(LNode));
s -> data = e;
s -> prior = p;
s -> next = p -> next;
p -> next = s;
p = s;
L -> prior = p;
cin >> e;}return L;}// 按位删除boolListDelete(LinkList &L,int i, ElemType &e){
LNode *p = L;int j =0;while(p !=NULL&& j < i -1){
p = p -> next;
j ++;}// i 值不合法if( p ==NULL|| p -> next ==NULL){returnfalse;}
LNode *s = p -> next;
e = s -> data;
p -> next = s -> next;if( s -> next != L){
s -> next -> prior = p;}free(s);returntrue;}// 打印voidPrintList(LinkList L){
LinkList p = L, q = L;
cout <<"打印序列-正向:";while(p !=NULL&& p -> next != L){
p = p -> next;
cout << p -> data <<' ';}
cout << endl;
cout <<"打印序列-反向:";while(q !=NULL&& q -> prior != L){
q = q -> prior;
cout << q -> data <<' ';}
cout << endl;}intmain(){
LinkList L;// 创建// List_HeaderInsert(L);List_TailInsert(L);// 打印PrintList(L);
ElemType e;ListDelete(L,1, e);
cout <<"删除元素:"<< e <<endl;PrintList(L);// 插入元素ListInsert(L,3,44);PrintList(L);
LNode *item =GetElem(L,3);if(item){
cout << item -> data;}return0;}