王道ch 1-シングルチェーン表の定義、作成、番号で検索し、値で検索し、挿入、削除し、表の長さを求めます.


定義
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode,*LinkList;
を作成します.
//      
LinkList headInsert(LinkList& L)
{
	int x; LNode* s;
	L = (LinkList)malloc(sizeof(LNode));
	L->next = NULL;
	cin >> x;
	while (x != 9999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		s->next = L->next;
		L->next = s;
		cin >> x;
	}
	return L;
}
//      
LinkList tailInsert(LinkList& L)
{
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	LNode* s, * r = L;
	cin >> x;
	while (x != 9999)
	{
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r = s;

		cin >> x;
	}
	r->next = NULL;
	return L;
}
番号で検索し、値で検索します.
//           
LNode* GetElem(LinkList& L,int i)
{
	LNode* p = L->next;
	int j = 1;
	if (i == 0)
		return L;
	if (i < 0)
		return NULL;
	while (p&&jnext; j++;
	}
	return p;
}

//       e
LNode* LocatedElem(LinkList& L, int x)
{
	LNode* p = L->next;
	while (p)
	{
		if (p->data == x)
			return p;
		p = p->next; 
	}
	return NULL;
}
挿入
//      i       
LinkList H_Insert_x(LinkList& L, int i)
{
	int x;
	LNode*s,*p;
	p=GetElem(L,i-1);
	s = (LNode*)malloc(sizeof(LNode));
	cin >> x;
	s->data = x;
	s->next = p->next;
	p->next = s;
	return L;
}

int main()
{
	LinkList L;
	tailInsert(L);
	H_Insert_x(L, 2);
	LNode* p = L->next;
	while (p)
	{
		cout << p->data << " ";
		p = p->next;
	}
	return 0;
}
削除
//       i    
LinkList Delete(LinkList& L, int i)
{
	int x;
	LNode *p,*q;
	p = GetElem(L, i - 1);
	q=p->next ;
	x = q->data;
	p->next = q->next;
	free(q);
	return L;
}
表の長さを求める
//            
int count(LinkList& L)
{
	if (L->next == NULL)
		return 0;
	int count=1;
	LNode *p=L->next;
	while (p->next)//   p   ,   p  
	{
		p = p->next; count++;
	}
	return count;
}