1. 程式人生 > >C語言連結串列節點插入與刪除

C語言連結串列節點插入與刪除

線性表操作

順序表是我們資料結構中的基本儲存形式,現在給定一個順序表,有如下操作: Insert X Y:在順序表中X位置插入Y元素,遍歷輸出當前順序表的所有元素。 Delete X:刪除順序表中的X元素,如果有多個X元素,只刪除第一個X,遍歷輸出當前順序的所有元素。 Locate X:輸出順序表中X元素的所在的位置,如果有多個X元素,只輸出第一個X元素的位置。 GetElem X:輸出順序表中X位置上的元素。

程式碼如下:

#include<string.h>
    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node                         //定義一個結構體
    {
        int data;
        struct node *next;
    }node, *lk;

void init(lk *l)                                 //定義一個連結串列頭節點
{
    (*l) = (lk)malloc(sizeof(node));
    (*l)->next = NULL;
}
void creat(lk l,int n)                          //建立一個連結串列
{
    int a;
    lk tmp, p;
    tmp = l;
    int i;
    for(i = 0;i < n;i++)
    {
        p = (lk)malloc(sizeof(node));
        scanf("%d", &a);
        p->data = a;
        p->next = NULL;
        tmp->next = p;
        tmp = p;
    }
}
void insert(lk l,int n, int m)            //Insert X Y:在順序表中X位置插入Y元素,遍歷輸出當前順序表的所有元素。
{
    lk p, q;
    p = l;
    int i;
    for(i = 0;i < n-1;i++)
    {
    	p = p->next;
	}
	q = (lk)malloc(sizeof(node));
	q->data = m;
	q->next = p->next;
	p->next = q;
}
void show(lk l)    //列印連結串列
{
	int flag = 1;
lk p;
p = l;
p = p->next;
    while(p)
    {
    	if(flag)
    	{
    		printf("%d", p->data);
        	flag = 0;
		}
		else{
			printf(" %d", p->data);
		}
        p = p->next;
    }
    printf("\n");
}
int GetElem(lk l, int n)     //GetElem X:輸出順序表中X位置上的元素。
{
	int i;
	for(i = 0;i < n;i++)
	{
		l = l->next;
	}
	return l->data;
}
int Delete (lk l, int n)               //Delete X:刪除順序表中的X元素,如果有多個X元素,只刪除第一個X,遍歷輸出當前順序的所有元素。
{
	lk p ,q,s;
	p = l;
	q = l->next;
	int i = 0;
	while(q)
	{
		if(q->data==n)
		{
			p->next = q->next;
			//s = q;
			q= q->next;
			i = 1;
			break;
		}
		else
		{
			p = p->next;
			q = q->next;
		}
	}
	return i;
}
int Locate(lk l,int n)   Locate X:輸出順序表中X元素的所在的位置,如果有多個X元素,只輸出第一個X元素的位置。
{
	int q = 0;
	while(1)
	{
		l = l->next;
		q++;
		if(l->data == n)
		{
			break;
		}
	}
	return q;
}
int main()
{
	int m , n;
	scanf("%d %d", &m, &n);
	lk l;
	init(&l);
	creat(l, m);
	int k;
	char a[10];
	int x,y,rt;
	for(k = 0;k < n;k++)
	{
		scanf("%s", &a);
		if(a[0] == 'I')
		{
			scanf("%d %d", &x, &y);
			if(x > m)
			{
				printf("Wrong Input!\n");
			}
			else
			{
				insert(l,x,y);
				show(l);
			}
		}
		else if(a[0] == 'D')
		{
			scanf("%d", &x);
			if(Delete(l,x) == 0)
			{
				printf("Wrong Input!\n");
			}
			else
			{
				Delete(l,x);
				show(l);
			}
		}
		else if(a[0] == 'L')
		{
			scanf("%d", &x);
			if(x > m)
			{
				printf("Wrong Input!\n");
			}
			else
			{
				rt = Locate(l,x);
				printf("%d\n", rt);
			}
		}
		else if(a[0] == 'G')
		{
			scanf("%d", &x);
			if(x > m)
			{
				printf("Wrong Input!\n");
			}
			else
			{
				rt = GetElem(l,x);
				printf("%d\n", rt);
			}
		}
		else
		{
			printf("%d\n", rt);
		}		
	}	
	return 0;
}

結果展示

在這裡插入圖片描述