1. 程式人生 > >線性連結串列的插入與刪除

線性連結串列的插入與刪除

程式碼功能:實現連結串列插入與刪除的基本功能

線性表插入與刪除操作

Input

第一行給出線性表內現有資料元素的數目N,1<=N<=10;第二行給出N個整數:a1、a2、a3…aN,整數之間用一個空格隔開,表示線性表現有的資料元素。第三行給出兩個整數K、E1,1<=K<=N,表示在第K個元素前插入值為E1的資料元素;第四行給出一個整數E2,表示線上性表中刪除第一個值為E2的資料元素(假定線性表裡一定存在值為E2的資料元素)。

Output 

在一行內按次序輸出進行插入和刪除後線性表的所有資料元素,資料元素之間用一個空格隔開。

 Sample Input

8
12 13 21 24 28 30 42 77
5 25
24

Sample Output

12 13 21 25 28 30 42 77

AC程式碼:

#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
	int date;
	struct Node *next;
}Node,*LinkList;
void CreateList(LinkList &pa,int n) //建立連結串列 
{
	LinkList p,q;
	//p=(LinkList)malloc(sizeof(Node));
	p=pa;
	int i,a;
	for(i=0;i<n;++i) 
	{
		q=(LinkList)malloc(sizeof(Node));
		scanf("%d",&(q->date));
		p->next=q;
		q->next=NULL;
		p=q;
	}
}
void print(LinkList &pa,int n)  //輸出連結串列  pa為頭結點,n個有效節點
{
     int i;
     LinkList p=pa->next;
     printf("%d",p->date);
     for(i=2;i<=n;++i)
     {
		p=p->next;
		printf(" %d",p->date);
     }
     printf("\n");
}
bool DeleteList(LinkList &pa,int m,int &n)   //刪除資料域為m的節點
{
	LinkList p=pa,q=NULL;
	int j=1;
    while(p&&j<=n)
    {
	  if(p->next->date==m)
	  {  q=p->next;
	     p->next=p->next->next;
		 free(q);n--;
		 //printf("%d#\n",n);
		 return true;
	  }
	  j++;
	  p=p->next;
	}
	return false;
}
bool InsertList(LinkList &pa,int k,int E1,int &n)  //k前在插入節點(資料域為E1)
{
	LinkList p=pa,s;
	int j=0;   //j=0可是空連結串列中插入元素
	while(p->next&&j<=k-1)
	{
		if(j==k-1)
		{
			s=(LinkList)malloc(sizeof(Node));
			s->date=E1;
			s->next=p->next;
			p->next=s;
			n++;
			return true;
		}
		j++;
		p=p->next;
	}
	return false;
}
int main()
{
	LinkList L,p;  //L為頭指標 
	L=(LinkList)malloc(sizeof(Node));   
	int N,i,K,E1,E2;
    while(~scanf("%d",&N)){
	CreateList(L,N);
	scanf("%d%d",&K,&E1);
	InsertList(L,K,E1,N);
	scanf("%d",&E2);
	DeleteList(L,E2,N);
	print(L,N);
    }
	//while(1);
    return 0;
}

相關推薦

靜態連結串列插入刪除操作詳解(C語言程式碼實現)

本節主要講解靜態連結串列的插入和刪除操作,有關靜態連結串列的詳細講解請閱讀《靜態連結串列及C語言實現》一文。 在講解靜態連結串列的插入和刪除操作之前,我們假設有如下的靜態連結串列: 圖中,array[0] 用作備用連結串列的頭結點,array[1] 用作存放資料的連結串列的頭結點,array[0]

雙向連結串列插入刪除操作

來源:http://blog.csdn.net/csdanca11/article/details/7173856   雙向連結串列 迴圈單鏈表的出現,雖然能夠實現從任一結點出發沿著鏈能找到其前驅結點,但時間耗費是O(n)。如果希望從表中快速確定某一個結點的前驅,

C寫連結串列線性表的建立插入刪除

連結串列 #include <bits/stdc++.h> typedef struct node { int data; struct node *next; } Lnode; Lnode *L; void dele(int pos){ Lnode *p;

線性連結串列插入刪除

程式碼功能:實現連結串列插入與刪除的基本功能 線性表插入與刪除操作 Input 第一行給出線性表內現有資料元素的數目N,1<=N<=10;第二行給出N個整數:a1、a2、a3…aN,

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

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

雙向連結串列插入刪除節點

#include <stdio.h> #include <malloc.h> typedef struct linknode//定義雙向連結串列 { int data; linknode *prior,*next; } Node,*

【資料結構】順序表、單鏈表、迴圈連結串列插入刪除

寫在前面的 順序表 插入 刪除 定位 單鏈表 插入 刪除 總結 寫在前面的        在複習資料結構的過程中對於連結串列的操作總是容易忘記,時不時的就不知道具體的該怎麼

使用雙重指標實現連結串列結點的插入刪除

單鏈表結點的插入和刪除是資料結構中很基本的操作。如果單鏈錶帶有頭結點,那麼可以把頭結點指標傳遞給插入和刪除函式;可如果對無頭結點的單鏈表進行上述操作,僅傳遞頭指標(指向第一個結點的指標),在插入或刪除操作改變連結串列頭指標時,將會有些問題。 下面我們通過一個例

線性連結串列的查詢插入刪除演算法

插入操作具體演算法 Status ListInsert_L(Linklist &L,int i,Elemtype e){ //在帶頭結點的單鏈表L中第i個位置之前插入元素e LinkList p=L;//p為移動指標,指向頭結點

單鏈表(線性連結串列)資料元素插入刪除

資料元素的插入:為插入資料元素x,首先要生成一個數據域為x的結點,然後插入在單鏈表中,根據插入操作的邏輯定義,還需要修改結點a中的指標域,令其指向節點x,而結點x中的指標域應指向結點b,從而實現3個元素a,b和x之間邏輯關係的變化。 資料元素的刪除:線上性

資料結構 線性連結串列的創立及其基本操作初始化、遍歷、銷燬、判空、求表長、刪除插入

最近寫了個數據結構的單鏈表,其中包括十來個基本操作演算法,包括了建立單鏈表、刪除、插入、定位、遍歷等基本的操作。在VS上運行了一下,可以通過,感覺還不錯,和大家分享一下! 我是建立了一個C++專案,在專案下寫的,你們也可以建立專案把下面的東西複製到編譯器上試試! 第一部分是

線性表的順序儲存表示時的插入刪除

線性表的插入與刪除屬於算法系列,學資料結構的寶寶們應該知道這點,首先說一下演算法的位置與c語言中陣列位置的記作方法一樣,都是從0開始,比如說線性表中第i個數據元素,那麼它的位置是L.elem[i-1]。這個沒什麼難度,因為計算機的寶寶們都學習過陣列,二者是一樣的。 下面討論一下線性表的插入和刪除

連結串列插入(線性表)

題目描述 (線性表)已知一單鏈表,從第二個結點至表尾遞增有序,(設a1<x<an)如下圖(“第二個結點至表尾”指a1…an )。試編寫程式,將第一個結點刪除並插入表中適當位置,使整個連結串列遞增有序。 輸入 輸入長度n:7 輸入資料:4 1 2 3 6 8

資料結構演算法-----單向線性連結串列(逆轉和反向列印)

單向連結串列沒有前指標,所以實現反向列印還是比較麻煩,我們這裡使用遞迴原理解決此問題。 這裡提到逆轉,也就是將單鏈表的next指標指向前一個節點,我們也使用遞迴實現。 // 練習:實現單向線性連

資料結構—連結串列元素的刪除插入

連結串列相對於線性表的優點就在於插入和刪除十分方便。 那麼我用一個有意思的比喻來描述一下這個過程。 插入: 小紅和小琴是好閨蜜,她們天天都拉著手(找男的比喻不大好啊,23333) 咳咳,就是這樣(圖中藍色上衣的是小紅,綠色裙子的是小琴) 小紅的

線性連結串列的建立顯示

#include<stdio.h> #include<malloc.h> typedef int ElemType; typedef struct Node { ElemType data; struct Node*next; }LNode; v

連結串列---------插入、查詢、刪除重複元素、找到倒數第K個值、找到反轉、列印連結串列、查詢中間元素、是否有環、是否相交

package JBLinkList; public class MyLinkList { Node head ; public MyLinkList(){ head = null; } /** * 新增結點(尾部) * @param d */

線性表的順序儲存結構及該結構的插入刪除

順序儲存定義 線性表的順序儲存結構,指的是用一段地址連續的儲存單元依次儲存線性表的資料元素。 順序儲存方式 線性表的順序儲存結構,就是在記憶體中找了塊地兒,通過站位的形式,把

資料結構之線性表的順序儲存結構(陣列)的插入刪除

線性表的順序存數結構:指的是用一段地址連續的儲存單元一次儲存線性表的資料元素      在記憶體中找塊記憶體,把相同資料型別的資料元素一次存放在這塊空間中。可以用以為陣列來實現順序儲存結構。陣列的長

二叉排序樹的插入刪除

else post 相等 大於 truct art parent node -m 二叉排序樹的插入與刪除可能會破壞二叉排序樹的性質,如今要求插入和刪除操作保持其性質 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上全部結點的