當前位置:首頁 » 編程語言 » 帶結點的c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

帶結點的c語言

發布時間: 2022-06-01 07:24:38

1. c語言帶頭節點與不帶頭節點有什麼區別

帶頭節點,對第一個節點及其後的節點都可以一樣看待,任何操作都可以用相同的方法。
不帶頭節點,對第一個節點的操作就要區別對待,比如刪除了第一個節點,第二個就作為第一個,頭指針就要修改指向第二個節點。帶了頭結點,頭指針一直指向頭結點。

2. C語言中結點是什麼

1、在數據結構的圖形表示中,對於數據集合中的每一個數據元素用中間標有元素值的方框表示,一般稱之為數據結點,簡稱結
點。在C語言中,鏈表中每一個元素稱為「結點」,每個結點都應包括兩個部分:一為用戶需要用的實際數據;二為下一個結點的地址,即指針域和數據域。數據結構中的每一個數據結點對應於一個儲存單元,這種儲存單元稱為儲存結點,也可簡稱結點。

2、舉例說明如下:
1)對於線性表存儲結構:
1, 2, 3, 4, 5, ......, k, k+1, .......
則結點k+1的直接前驅結點為結點k

2)對於鏈表存儲結構
// 結點的定義
struct node
{
int data; // 數據域
struct node *next; // 指針域
};
struct node *Head; // Head表示鏈表的頭結點,則Head->next為頭結點Head的後繼結點;Head為Head->next的前驅節點

3. C語言創建帶頭結點的鏈表

#include<stdio.h>
#include<stdlib.h>
#defineN8
typedefstructlist{
intdata;
structlist*next;
}SLIST;

SLIST*deletelist(SLIST*p,int*pvalue){
SLIST*q,*t;
q=p;
while(q->next){
if(q->next->data==*pvalue){
t=q->next;
q->next=t->next;
free(t);
break;
}
q=q->next;
}
returnp;
}

SLIST*creatlist(int*a){
SLIST*h,*p,*q;
inti;
h=p=(SLIST*)malloc(sizeof(SLIST));
for(i=0;i<N;i++){
q=(SLIST*)malloc(sizeof(SLIST));
q->data=a[i];
p->next=q;
p=q;
}
p->next=0;
returnh;
}

voidoutlist(SLIST*h){
/*這里輸出鏈表中各個數據*/
SLIST*p=h->next;
while(p){
printf("%d",p->data);
p=p->next;
}
printf(" ");
}

intmain(void){
SLIST*head;
intnvalue,i;
inta[N];
printf("輸入%d個整數: ");
for(i=0;i<N;i++){
scanf("%d",&a[i]);
}
head=creatlist(a);
outlist(head);
printf("要刪除的數據:");
scanf("%d",&nvalue);//刪除的結點數據
head=deletelist(head,&nvalue);
outlist(head);
return0;
}

4. 用c語言尾插法建立帶頭結點的單鏈表

EOF!=(scanf("%d",&x)是什麼意思?把scanf("%d",&x)寫在while語句的上面為什麼不行?
這里是指輸入成功的話,執行下面的大括弧裡面語句。
pre->next是指當前結點的前一個結點,這里用於交換位置的。你可以畫個圖來查看他們之間的聯系,就會很清楚了

5. C語言 帶頭結點的單鏈表的各種操作

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

// 定義鏈表中的節點

typedef struct node

{

int member;

struct node *pNext;

}Node,*pNode;

pNode CreateList(int *); // 創建鏈表函數

void TraverseList(pNode ); // 遍歷鏈表函數

void Insert_Node(pNode,int);

int Del_Node(pNode);



int main()

{

int a[10]={2,1,0,3,6,4,8,2,7,9};

int s[10]={2,5,4,6,3,1,8,7,9,0};

pNode pHead = NULL;

int data;

int num;

int choose;

int return_val;

pHead = CreateList(a);

Insert_Node(pHead,10);

TraverseList(pHead);

pHead = CreateList(s);

printf("刪除數據%d ",Del_Node(pHead));

TraverseList(pHead);

return 0;

}

pNode CreateList(int *a)

{

int i; // 用於下面循環

int len=10; // 用來存放有效節點的字數

int val; // 用於臨時存放用戶輸入的數據

pNode pHead = (pNode)malloc(sizeof(Node)); // 分配一個不存放有效數據的頭結點

pNode pTail = pHead; // 鏈表的最後一個節點

pTail->pNext = NULL; // 最後一個節點的指針置為空

for(i = 0; i < len; i++)

{

pNode pNew = (pNode)malloc(sizeof(Node)); // 為節點分配空間

pNew->member = a[i];; //將用戶輸入的數據賦給節點的成員

pTail->pNext = pNew; //將最後一個節點的指針指向下一個新的節點

pNew->pNext = NULL; //將新節點中的指針置為空

pTail = pNew; //將新節點賦給最後的一個節點

}

return pHead; //返回頭節點

}

// 遍歷鏈表函數

void TraverseList(pNode pHead)

{

pNode p = pHead->pNext; //將頭節點的指針給予臨時節點p

while(NULL != p) //節點p不為空,循環

{

printf("%d ",p->member);

p = p->pNext;

}

printf(" ");

return ;

}

void Insert_Node(pNode pHead,int data)

{

int i = 0;

pNode _node = pHead,nex,pNew;

while (1)

{

_node = _node->pNext;

++i;

if(i==5) break;

}

pNew = (pNode)malloc(sizeof(Node));

nex=_node->pNext;

pNew->member = data; // 把輸入的數據賦給要插入的節點

_node->pNext = pNew; // 把要插入的節點的地址,給上個節點的指針域

pNew->pNext = nex;

}

// 刪除鏈表節點函數

int Del_Node(pNode pHead)

{

int i = 0;

int data;

pNode _node = pHead;

pNode pSwap;

while(1)

{

_node = _node->pNext;

++i;

if(i==4) break;

}

pSwap = _node->pNext;

data = pSwap->member;

_node->pNext = _node->pNext->pNext;

free(pSwap);

return data;

}

6. 求數據結構(C語言)帶頭結點的單鏈表 節點的插入

我給你說下大概思路:
1、在p之前插入結點,首先要找到p前一個結點的位置,假設用pos指向p前一個結點的位置,然後申請結點newNode,讓它的數據域為e,然後讓newNode->next=pos->next,pos->next=newNode。
2、在p之後插入結點,同樣申請結點,賦值為e,然後讓NewNode->next=p->next,p->next=NewNode。

7. C語言建立帶頭結點的單鏈表

單鏈表的生成有2種方式:頭插法和尾插法。

1、頭插法

/*********************************************************************
*函數名稱:linklist*CreateLinklistHead()
*函數功能:利用頭插法創建鏈表
*參數:無
*返回值:創建完鏈表後的鏈表頭結點
*說明:無
*********************************************************************/
externlinklist*CreateLinklistHead()
{
intx,i,nodeNum;
linklist*head,*temp;//頭結點與臨時結點
head=(linklist*)malloc(sizeof(linklist));//生成表頭結點
head->next=NULL;//給表頭結點的指針域賦值
printf("請輸入鏈表中結點的個數:");
scanf("%d",&nodeNum);
for(i=1;i<=nodeNum;i++)
{
printf("請輸入第%d個結點的數據:",i);
scanf("%d",&x);
temp=(linklist*)malloc(sizeof(linklist));//生成新的結點
temp->data=x;//對新結點的數據域賦值
//將新結點插到頭結點之後
temp->next=head->next;
head->next=temp;
}
returnhead;//返回新建鏈表的頭結點
}

2、尾插法

/*********************************************************************
*函數名稱:linklist*CreateLinklistRear()
*函數功能:利用尾插法創建鏈表
*參數:無
*返回值:創建完鏈表後的鏈表頭結點
*說明:無
*********************************************************************/
externlinklist*CreateLinklistRear()
{
intx,i,nodeNum;
linklist*head,*rear,*temp;//定義頭結點、尾結點和臨時結點
head=(linklist*)malloc(sizeof(linklist));//生成表頭結點,表頭結點不存放數據
head->next=NULL;//將表頭結點的指針域賦值為NULL
rear=head;//將表頭結點賦值給表尾結點
printf("請輸入鏈表中結點的個數:");
scanf("%d",&nodeNum);
for(i=1;i<=nodeNum;i++)
{
printf("請輸入第%d個結點的數據:",i);
scanf("%d",&x);
temp=(linklist*)malloc(sizeof(linklist));//生成新的結點
temp->data=x;//新增結點的數據域
temp->next=NULL;//新增結點的指針域(由於是尾插法,所以插入的結點都在尾部,即指針域為NULL)
rear->next=temp;//使前一個結點指向新增結點(head->next=temp)
rear=temp;//將新增結點賦值給尾結點(尾插法,插入的結點在尾部)(rear=head->next)
}
//rear->next=NULL;//將尾結點的指針域賦值為空(為了方便檢驗鏈表是否為空鏈表)
returnhead;//返回頭結點
}

8. C語言 創建帶頭結點的鏈表

單鏈表的生成有2種方式:頭插法和尾插法。
1、頭插法
/*********************************************************************
* 函數名稱:linklist *CreateLinklistHead()
* 函數功能:利用頭插法創建鏈表
* 參 數:無
* 返 回 值:創建完鏈表後的鏈表頭結點
* 說 明:無
*********************************************************************/
extern linklist *CreateLinklistHead()
{
int x, i, nodeNum;
linklist *head, *temp; // 頭結點與臨時結點
head = (linklist *)malloc(sizeof(linklist)); // 生成表頭結點
head->next = NULL; // 給表頭結點的指針域賦值
printf("請輸入鏈表中結點的個數:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("請輸入第 %d 個結點的數據:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的結點
temp->data = x; // 對新結點的數據域賦值
// 將新結點插到頭結點之後
temp->next = head->next;
head->next = temp;
}
return head; // 返回新建鏈表的頭結點
}2、尾插法
/*********************************************************************
* 函數名稱:linklist *CreateLinklistRear()
* 函數功能:利用尾插法創建鏈表
* 參 數:無
* 返 回 值:創建完鏈表後的鏈表頭結點
* 說 明:無
*********************************************************************/
extern linklist *CreateLinklistRear()
{
int x, i, nodeNum;
linklist *head, *rear, *temp; // 定義頭結點、尾結點和臨時結點
head = (linklist *)malloc(sizeof(linklist)); // 生成表頭結點,表頭結點不存放數據
head->next = NULL; // 將表頭結點的指針域賦值為NULL
rear = head; // 將表頭結點賦值給表尾結點
printf("請輸入鏈表中結點的個數:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("請輸入第 %d 個結點的數據:", i);
scanf("%d", &x);
temp = (linklist *)malloc(sizeof(linklist)); // 生成新的結點
temp->data = x; // 新增結點的數據域
temp->next = NULL; // 新增結點的指針域(由於是尾插法,所以插入的結點都在尾部,即指針域為NULL)
rear->next = temp; // 使前一個結點指向新增結點(head->next=temp)
rear = temp; // 將新增結點賦值給尾結點(尾插法,插入的結點在尾部)(rear=head->next)
}
//rear->next = NULL; // 將尾結點的指針域賦值為空(為了方便檢驗鏈表是否為空鏈表)
return head; // 返回頭結點
}

9. 用c語言寫帶頭結點鏈表分塊的演算法設計(大於5的值放入鏈表B,小於5的值放入鏈表C)

typedefine struct {
int value;
LinkList *next;
}LinkList;

void SblitList(LinkList *A, LinkList **B, LinkList **C)
{
while(A)
{
if(A->value > 5)
{
push(B, A->value);
}
else
push(C, A->value);
A = A->next;
}
}

10. 數據結構:用C語言:創建一個帶結點的空鏈表,並輸出。

#include<cstdio>
#include<cstdlib>

typedefstructpoi
{
charnum[10];
charname[20];
intage;
structpoi*next;
}pointer;

pointer*head,*tail;

pointer*newnode()
{
pointer*u=(pointer*)malloc(sizeof(pointer));//分配一個動態地址。這個函數要記下里。同時要開cstdlib頭文件
u->next=NULL;
}

intmain()
{
head=newnode();//創建一個新的指針。
tail=head;
for(inti=1;i<=5;i++)
{
tail->next=newnode();
tail=tail->next;
//你可以輸入數據然後存入指針中。比如scanf("%d",&tail->age);然後給tail->num什麼的賦值。
}
pointer*u=head->next;
while(u!=NULL)
{
//輸出什麼東西。。。比如printf("%d ",u->age);
u=u->next;
}
return0;
}