搜索
您的当前位置:首页数据结构线性链表

数据结构线性链表

时间:2020-01-01 来源:乌哈旅游


这是单链表的创建,取元素,添加,删除和销毁等功能实例: #include #include #define TRUE 1 #define FALSE 0 #define OK 1

#define ERROR 0 typedef int Status; typedef int ElemType;

typedef struct Lnode{ ElemType data; struct Lnode *next; }Lnode;

typedef Lnode *LinkList;

Status InitList(LinkList &L) { Lnode *p;

p=(Lnode *)malloc(sizeof(Lnode)); if(p==NULL) return ERROR; L=p;

L->next=NULL; return OK; }

Status CreatList(LinkList &L) { int i,len; ElemType x; LinkList p,q;

printf(\"input list length:\"); scanf(\"%d\

printf(\"\\ninput list data:\\n\"); i=0; q=L; while(i{ p=(Lnode *)malloc(sizeof(Lnode)); scanf(\"%d\ p->data=x; q->next=p; q=p; i++; }

q->next=NULL;

return OK; }

int ListLength(LinkList L) { int len=0; LinkList p; p=L->next; while(p) { len++;

p=p->next;} return (len); }

Status GetList(LinkList L,int i,ElemType &e) { int j;

LinkList p;

if(i<1) return ERROR; j=0; p=L;

while(p->next!=NULL&&jnext; j++;}

if(j==i) {e=p->data; return OK;} return ERROR; }

Status InsertList(LinkList &L,int i,ElemType e) { int j;

LinkList p,q;

if(i<1) return ERROR; j=0; p=L;

while(p->next!=NULL&&jnext; j++;} if(j==i-1)

{ q=(Lnode *)malloc(sizeof(Lnode)); q->data=e;

q->next=p->next; p->next=q; return OK;} return ERROR;

}

Status DeleteList(LinkList &L,int i,ElemType &e) { int j;

LinkList p,q;

if(i<1) return ERROR; j=0; p=L;

while(p->next!=NULL&&jnext; j++;}

if(p->next==NULL) { return ERROR;} else

{ q=p->next;

p->next=q->next; e=q->data; free(q); return OK;} }

void PrintList(LinkList L) {

LinkList p; p=L->next;

printf(\"链表中的元素为:\"); while(p){

printf(\"%4d\ p=p->next; }

printf(\"\\n\"); }

void main() {

ElemType i,e; LinkList L; InitList(L); CreatList(L);

printf(\"输入要取元素的位置:\"); scanf(\"%d\ GetList(L,i,e);

printf(\"第%d个位置的元素是:%d\\n\ printf(\"输入要插入元素的位置及元素值:\");

scanf(\"%d%d\ InsertList(L,i,e);

printf(\"已插入元素%d在第%d个位置!\\n\ PrintList(L);

printf(\"输入要删除的位置:\"); scanf(\"%d\ DeleteList(L,i,e);

printf(\"已删除第%d个元素的位置%d!\\n\ PrintList(L); }

这是单链表中删除三个链表相同元素的实例: #include #include

#define TRUE 1 #define FALSE 0 #define OK 1

#define ERROR 0 typedef int Status; typedef int ElemType;

typedef struct Lnode{ ElemType data; struct Lnode *next; }Lnode;

typedef Lnode* LinkList;

void creatList(LinkList &L,int length) { int i;

ElemType elem; LinkList p,s;

L=(LinkList)malloc(sizeof(Lnode)); L->next=NULL; p=L;

printf(\"请输入链表数据:\"); for(i=0;is=(LinkList)malloc(sizeof(Lnode)); s->data=elem; p->next=s; p=s;

}

p->next=NULL; }

Status dispList(LinkList L) {

LinkList p=L->next; if(!p){

printf(\"链表是空的!\\n\"); return FALSE; }

while(p){

printf(\"%4d\ p=p->next; }

printf(\"\\n\"); return TRUE; }

Status isElem(LinkList L,ElemType e) {

LinkList p=L->next; while(p){

if(e==p->data) return TRUE; else p=p->next; }

if(!p) return FALSE; }

Status deleteElem(LinkList L1,LinkList L2,LinkList L3) {

LinkList q=L1, p=L1->next; while(p){

if(isElem(L2,p->data)&&isElem(L3,p->data)) { q->next=p->next; p=q->next; }

else { q=p;

p=p->next; } }

return FALSE; }

void distroyList(LinkList &L)

{

LinkList p=L,q; while(p){ q=p->next; free(p); p=q; }

printf(\"链表已经被销毁!\\n\"); }

void main() {

int len;

printf(\"请输入链表1的长度:\"); scanf(\"%d\ LinkList L1,L2,L3; creatList(L1,len);

printf(\"请输入链表2的长度:\"); scanf(\"%d\ creatList(L2,len);

printf(\"请输入链表3的长度:\"); scanf(\"%d\ creatList(L3,len);

printf(\"链表1中的元素为:\"); dispList(L1);

printf(\"链表2中的元素为:\"); dispList(L2);

printf(\"链表3中的元素为:\"); dispList(L3);

deleteElem(L1,L2,L3);

printf(\"\\n删除后链表1中的元素为:\"); dispList(L1); distroyList(L1); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top