⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linklist.h

📁 各种算法的c语言程序
💻 H
字号:
#include<iostream.h>
#include <stdio.h>
#include <malloc.h>
#include <ctype.h>
#define  OK             1
#define  ERROR          0
#define TRUE            1
#define FALSE           0
typedef int Status; 
typedef int ElemType;



typedef struct LNode//定义链表结点。
{
   char   data;
   int    weight;
   struct LNode *next;
   }LNode,*LinkList;


void CreateList_L(LinkList &L,int *w,char *v,int n)//顺序输入n个元素的值,建立带头节点的单链线性表L。
{
	int i;
	LinkList p,q,s;
	L=(LinkList)malloc(sizeof(LNode));
    q=(LinkList)malloc(sizeof(LNode));//生成新接点。
	L->next=q;//先建立一个带头节点的单链表。
	for(i=0;i<n;++i,w++,v++){
	    q->data=*v;
		q->weight=*w;              //输入元素值。
		p=(LinkList)malloc(sizeof(LNode));//生成新接点。
		s=q;
		q->next=p;           //初始表尾
		q=p;
	}
	s->next=NULL;
}



Status LinkInsert_L(LinkList &L,int i,ElemType e){
	//在带头接点的单链线性表L中第i个位置之前插入元素。
    int j;
	LinkList p,s;
	p=L;j=0;
    while(p&&j<i-1) {p=p->next;++j;}//寻找第i-1个结点。
    if(!p||j>i-1) return ERROR;//i小于1或者大于表长。
	s=(LinkList)malloc(sizeof(LNode));//生成新结点。
	s->data=e;s->next=p->next;//插入L中。
	p->next=s;
	return OK;
}//LinkInsert_L;

Status Condigit(int &b)//判断输入是否为整数,如果是整数用i返回其值。
{
  int j;
  char g;
     do{//判断输入是否为数字。
		j=1;
		fflush(stdin);
            if(isalpha(g=fgetchar())) {//输入错误。
			  j=0;cout<<"请输入整数"<<endl;}
				   	else b=g-48;//计算所输入的整数。
		}while(!j);//输入正确。
	 return OK;
}

Status ListDisplay_L(LinkList L){//屏幕输入链表。
   LinkList p;
   int i=1;
   p=L;
   if(!p->next) cout<<"链表为空!"<<endl;
   else{ p=p->next;
         while(p->next)//顺序输出数据。
		 {  cout<<"第"<<i<<"个元素是"<<p->data<<endl;
         p=p->next;i++;
		 }
  cout<<"第"<<i<<"个元素是"<<p->data<<endl;
		}
 return OK;
}

Status ListDelete_L(LinkList &L,int i,ElemType &e)
{//在带头结点的单链表L中,删除第i个元素,并由e返回其值。
	LinkList p=L,q;
	int j=0;
	while(p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱。
		p=p->next;++j;
	}
	if(!(p->next)||j>i-1) return ERROR;//删除位置不合理。
	q=p->next;p->next=q->next;      //删除并释放结点。
	e=q->data;free(q);
	return OK;
}//ListDelete_L

Status ListEmpty(LinkList L){//判断一个兰表示否为空,若为空返回TRUE,否则返回FALSE。
     if(!(L->next)) return TRUE;
	 else return FALSE;
}

Status ClearList(LinkList &L){//清空链表,保留头结点。
	LinkList p=L->next,q;
	  L->next=NULL;
	  while(p->next)//从上自下释放结点。
	  { q=p->next;
	    free(p);
		p=q;
	  }
	  free(p);
	  return OK;
}

Status DestroyList(LinkList &L){//销毁一个链表L,L不再存在。
	if(!L->next) free(L);
    else 
		{ ClearList(L);
			free(L);
		}
    return OK;
}

Status ListLength(LinkList L,int &n){//求链表长,返回元素个数。
	LinkList p=L;
	int i=0;
	 while(p->next)
			{ p=p->next;
			i++;n=i;
			cout<<"hahah"<<endl;
			}
		  return OK;
}

Status ListSearch(LinkList L,int i,LinkList &p){
	//返回第n个节点的前躯 
    int j=0;
	p=L;
	while(p->next&&j<i-1){//寻找第i个结点,并令p指向其前驱。
		p=p->next;++j;
	}
	if(!(p->next)||j>i-1) return ERROR;//位置不合理。

	
	return OK;
}






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -