當前位置:首頁 » 編程語言 » c語言創建單鏈表

c語言創建單鏈表

發布時間: 2022-03-05 08:31:34

A. c語言建立帶頭結點的單鏈表

單鏈表的生成有2種方式:頭插法和尾插法。 1、頭插法 /********************************************************************** 函數名稱:linklist *CreateLinklistHead()* 函數功能:利用頭插法創建鏈表* 參 數:無* 返 回 值:創建完鏈表後C語言建立帶頭結點的單鏈表

B. C語言寫一個程序,能根據輸入來創建單鏈表

沒有懸賞分嗎?
那就給你個逆轉指針的函數
#include <stdio.h> //將鏈表指針逆轉
#include <iostream.h>
#include <stdlib.h>

typedef struct _Node
{
struct _Node *next;
int val;
} Node;

void reverseNodes(Node *node) //不斷循環遞歸的過程
{
if (NULL == node->next)
return;
else
{
reverseNodes(node->next);
node->next->next = node;
}
}

void reverseList(Node *node)
{
reverseNodes(node);
node->next = NULL;
}

void printList(Node *node)
{
while (node)
{
printf("%d-->", node->val);
node = node->next;
}
cout<<"end"<<endl;
}

int main(void)
{
Node n1, n2, n3, n4; //used to test the revertnodes function

n1.next = &n2;
n1.val = 1;

n2.next = &n3;
n2.val = 2;

n3.next = &n4;
n3.val = 3;

n4.next = NULL;
n4.val = 4;

printList(&n1);

reverseList(&n1);
printList(&n4);

return 0;
}

C. c語言鏈表的創建

這個鏈表做得不好。其實鏈表可以不用創建這一步。因為插入操作已經包含有創建功能了。else後面的語句,就如同你給繩子打結一樣。鏈表的節點好比一段一段的繩子,現在你需要把它們都接起來。你每接一段,手就要往後移動一節,以准備給下一段打結。else後面的語句,其實就是讓當前指針指向的節點後移。
我給你個程序:
#include <stdio.h>
#include <stdlib.h>

typedef struct tagPERSON //個人信息結構
{
char name[20];
long age;
}PERSON;

//template<typename DT> //如果是C++的話,這里方便許多,可以使用模板和類
typedef struct tagLNODE* pLNODE;
typedef struct tagLNODE //鏈表節點
{
PERSON data;
pLNODE next;
}LNODE;

int link_insert(pLNODE *head,PERSON data)//鏈表插入
{
pLNODE cur_tmp,lnode_tmp;

cur_tmp=*head;
lnode_tmp=(pLNODE)malloc(sizeof(LNODE));
if(lnode_tmp==NULL)return -1;
lnode_tmp->data=data;
lnode_tmp->next=NULL;

if(*head==NULL)
*head=lnode_tmp; //如果head為空,則需要對main()中的head修改,所以head的類型為指向指針的指針
else
{
while(cur_tmp->next!=NULL)
cur_tmp=cur_tmp->next;
cur_tmp->next=lnode_tmp;
}

return 0;
}

int link_display_cmd(pLNODE head) //控制台下的鏈表顯示
{
pLNODE cur_tmp;

cur_tmp=head;
while(cur_tmp!=NULL)
{
printf("%s:%d\n",(cur_tmp->data).name,(cur_tmp->data).age);
cur_tmp=cur_tmp->next;
}
return 0;
}

int link_clear(pLNODE *head) //清空鏈表
{
pLNODE cur_tmp,old_tmp;

cur_tmp=*head;
while(cur_tmp!=NULL)
{
old_tmp=cur_tmp;
cur_tmp=cur_tmp->next;
free(old_tmp);
}

*head=NULL;
return 0;
}

int main(void)
{
pLNODE head=NULL;
PERSON temp;

printf("Please input the name:");
scanf("%s",temp.name);
printf("Please input the age:");
scanf("%d",&(temp.age));
while(temp.age>0)
{
link_insert(&head,temp);
printf("Please input the name:");
scanf("%s",temp.name);
printf("Please input the age:");
scanf("%d",&(temp.age));
}

link_display_cmd(head);
link_clear(&head);

return 0;
}

D. c語言創建鏈表

1、你使用了malloc函數但沒有導入頭文件malloc.h。
2、函數DATA *create(int n);沒有申明就直接調用。
(另外main函數中DATA* head;給個初值NULL,避免野指針。)
修改以上內容,親測可運行。

E. C語言中怎樣建立鏈表

參考以前寫的這個吧,寫的不好,你修改吧
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define CD sizeof(struct Biao)
struct Biao
{
int num;
struct Biao *next;
};
int m,x;
int main()
{
struct Biao *jianli();
void paixu(struct Biao *n);
void chashu(struct Biao *n);
void shanshu(struct Biao *n);
void qiupingjun(struct Biao *n);
void tuichu();
int n;
struct Biao *t;
printf("1.建立鏈表\n2.排序\n3.插數\n4.刪數\n5.求平均值\n");
printf("請輸入選項:\n");
for(;;)
{
scanf("%d",&n);
switch(n)
{
case 1:t=jianli();break;
case 2:paixu(t);break;
case 3:chashu(t);break;
case 4:shanshu(t);break;
case 5:qiupingjun(t);break;
case 6:tuichu();break;
default:printf("輸入錯誤!請重新輸入\n");
}
}
}
struct Biao *jianli()
{
int i,j;
printf("建立鏈表,請輸入數據:\n");
struct Biao *head,*p1,*p2;
p1=p2=(struct Biao * )malloc(CD);//if(p1==NULL)建立鏈表失敗
for(i=0;i<=100;i++)
{
if(i==0)
{
head=p1;
p2->next=p1=(struct Biao * )malloc(CD);
p2=p1;
continue;
}
if(p1==NULL)
break;
else
{
scanf("%d",&p1->num);
if(p1->num==-1)
{
p2->num=NULL;
break;
}
p2->next=p1=(struct Biao * )malloc(CD);
p2=p1;
}
}
if(head->next->num==NULL)
printf("您建立了一個空鏈表\n");
else
{
printf("共有數據:%d\n",i-1);
m=i-1;
printf("輸出鏈表:\n");
p1=head->next;
for(j=0;j<i-1;j++)
{
printf("%d ",p1->num);
p1=p1->next;
}
}
printf("\n");
return(head);
}
void paixu(struct Biao *n)
{
int i,j,a,temp;
a=m;
struct Biao *p1,*p2,*tp;
p2=p1=n->next;
printf("從小到大排序結果:\n");
for(i=0;i<a-1;i++)
{
p1=p2;
tp=p1;
for(j=i+1;j<a;j++)
{
if((p1->next->num)<(tp->num))
{
tp=p1->next;
}
p1=p1->next;
}
temp=tp->num;tp->num=p2->num;p2->num=temp;
p2=p2->next;
}
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
}
void chashu(struct Biao *n)
{
int a,i,j;
struct Biao *p1,*p2,*tp;
m=m+1;
x=m;
a=m;
p1=n;
printf("請插入數字:\n");
p2=(struct Biao *)malloc(CD);
scanf("%d",&p2->num);
p1=n->next;
for(i=0;i<a-1;i++)
{
if(p1->num<=p2->num&&p1->next->num>p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
break;
}
if(p1->num<p2->num&&p1->next->num>p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
break;
}
if(n->next->num>p2->num)
{
tp=n->next;
n->next=p2;
p2->next=tp;
break;
}
p1=p1->next;
}
p1=n;//
for(i=0;i<a-1;i++)
{
p1=p1->next;
}
if(p1->num<=p2->num)
{
tp=p1->next;
p1->next=p2;
p2->next=tp;
}//演算法不簡便
printf("插入後的數據:\n");
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
printf("數據個數:%d\n",a);
}
void shanshu(struct Biao *n)
{
int a,i,j;
a=x;
struct Biao *p1,*p2;
printf("請輸入要刪除的數:\n");
scanf("%d",&j);
for(;;)
{
p1=n;
for(i=0;i<a;i++)
{
if(p1->next->num==j)
{
p2=p1->next;
p1->next=p1->next->next;
a-=1;
x-=1;
break;
}
p1=p1->next;
}
if(i==a)
break;
}
printf("結果:\n");
p1=n->next;
for(i=0;i<a;i++)
{
printf("%d ",p1->num);
p1=p1->next;
}
printf("\n");
printf("剩餘數據個數:%d\n",x);
}
void qiupingjun(struct Biao *n)
{
int s,i;
struct Biao *p1;
s=0;
p1=n->next;
for(i=0;i<x;i++)
{
s+=p1->num;
p1=p1->next;
}
printf("平均值為:%f\n",s*1.0/x);
}
void tuichu()
{
exit(0);
}

F. 單鏈表的創建程序(C語言)

?自己看看書,別問樹上有很多的、又沒有技術含量的問題。

G. c語言創建單鏈表

#include<stdio.h>
#include<stdlib.h>
/*線性表*/
struct TLink {
int data;
struct TLink * next;
};/*end struct TLink*/

/*生成新元素*/
struct TLink * new_item(int number)
{
struct TLink * r = 0;
r = (struct TLink *)malloc(sizeof(struct TLink));
r->data = number;
r->next = 0;
return r;
}/*end new_item*/

/*在線性表中查詢數據*/
struct TLink * lookup(struct TLink * root, int number)
{
struct TLink * h = root;
while(h) {
if (h->data == number) return h;
h = h->next ;
}/*end lookup*/
return 0;
}

/*在線性表中追加一個數據*/
void append(struct TLink * * root, int number)
{
struct TLink * r = 0, * n = 0;
if (!root) return ;

/*不記錄重復元素*/
if (lookup(*root, number)) return;

/*如果表為空則新建表*/
r = *root;
if (!r) {
*root = new_item(number);
return ;
}/*end if*/

/*為保證為有序線性表,如果數據比表頭還小則作為表頭*/
if (number < r->data ) {
n = new_item(number);
n->next = r;
*root = n;
return ;
}/*end if*/

/*在有序線性表中查找位置插入元素*/
while(r) {
n = r->next ;

/*如果已經是表尾則直接追加*/
if (!n) {
n = new_item(number);
r->next = n;
return ;
}/*end if*/

/*在中央某處插入*/
if (number < n->data ) {
r->next = new_item(number);
r->next->next = n;
return ;
}/*end if*/
r = n;
}/*end while*/
}/*end append*/

/*列印有序線性表*/
void print(struct TLink * root)
{
struct TLink * r = root;
printf("【");
while(r) {
printf("%d ", r->data );
r = r->next ;
}/*end while*/
printf("\b】\n");
}/*end print*/

/*將有序線性表h1合並至有序線性表h0,並銷毀線性表h1*/
void merge(struct TLink ** h0, struct TLink ** h1)
{
struct TLink * h = 0, * k = 0;
if (!h0 || !h1) return ;
h = *h1;
while(h) {
append(h0, h->data );
k = h;
h = h->next ;
free(k);
}/*end h*/
h1 = 0;
}

int main(void)
{
int i = 0; struct TLink * x=0, *y = 0;
int a[] = {8,4,3,9,5,1};
int b[] = {7,2,1,5,6,0};
printf("原數據為:\n數組A:【");
for(i = 0; i < 6; i++) {
printf("%d ", a[i]);
append(&x, a[i]);
}/*next*/
printf("\b】\n數組B:【");
for(i = 0; i < 6; i++) {
printf("%d ", b[i]);
append(&y, b[i]);
}/*next*/
printf("\b】\n轉換為有序線性表\nA:");
print(x);
printf("B:");
print(y);
printf("AB合並後為:");
merge(&x, &y);
print(x);
return 0;
}

/*以上是順序線性表的合並程序,逆序只需將插入條件從小於改為大於即可。
合並結果如果要保留,把合並函數的lookup調用刪除即可*/

H. C語言頭插法建立單鏈表

1. 所謂頭指針即為指向鏈表第一個節點的指針(若鏈表含有頭結點,則指向頭結點),該指針變數的值即為鏈表第一個節點(或頭節點)的地址 ,故對於你這段代碼來說頭指針L存放的是鏈表第一個元素的地址(因為沒有頭節點),若要將s所指向的元素要插入到表頭,步驟如下:(1)新元素與鏈表建立連接,(2)斷開頭指針與鏈表的連接,(3)頭指針指向新的表頭(本程序中即s所指的元素).
用代碼實現即為:(1)s->next=L(L原先指向第一個元素,現在讓新元素與鏈表建立連接,新元素成為表頭元素,原來的表頭元素成為鏈表上的第二個元素,需要將s的鏈接指針指向原先的表頭元素,即把L中原先存儲的表頭元素的地址賦給s的next指針),(2)(3)L=s(第一步完成了新元素加入鏈表的操作,若要想新元素作為鏈表的第一個元素,就要把它的地址賦給頭指針L,因為L作為頭指針應該始終指向表頭元素.這個語句就是實現第二和第三步的:斷開頭指針與鏈表的連接,頭指針指向新的表頭)
2. 如果你對上面的解釋能接受的話,那麼這一問你應該可以解答了:分析過程就不寫了,由頭至尾為:5->4->3->2->1
3. 至於這一問,要放到具體的上下文環境中來解釋,但無非就是鏈表的插入,刪除操作.可以找相關的資料看一看

誠如一樓所言:這部分剛開始學習時最好畫個圖,就很容易明白了

你也可以去這看一看:
http://blog.csdn.net/bingwen0210/archive/2007/04/07/1556089.aspx
上面有圖.

I. C語言單鏈表

C語言創建單鏈表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

intdata;

node * next;

}node , * List;

void create(int n)

{

int c;

List s,L;

L=(List)malloc(sizeof(node));

L->next=NULL;

printf("請輸入第1個數據:");

scanf("%d",&c);

L->data=c;

for(int i=2;i<=n;i++)

{

s=(List)malloc(sizeof(node));

printf("請輸入第%d個數據:",i);

scanf("%d",&c);

s->data=c;

s->next=L;

L->next =s;

}

printf("鏈表創建成功!");

}

void main()

{

int n;

printf("請你輸入鏈表的個數:");

scanf("%d",&n);

create(n);

}

熱點內容
手機手勢密碼忘了怎麼辦 發布:2025-01-12 17:14:51 瀏覽:485
這手機配置有什麼顏色的電視機 發布:2025-01-12 17:02:19 瀏覽:932
閣源碼 發布:2025-01-12 16:48:08 瀏覽:130
組裝機箱搭建伺服器 發布:2025-01-12 16:46:58 瀏覽:511
風險資產配置理論有哪些 發布:2025-01-12 16:46:13 瀏覽:981
小程序分銷源碼 發布:2025-01-12 16:42:41 瀏覽:47
linux查看系統硬體 發布:2025-01-12 16:34:26 瀏覽:968
安卓手機怎麼設置獨享標志 發布:2025-01-12 16:27:56 瀏覽:932
我的世界如何把材質包放進伺服器 發布:2025-01-12 16:11:14 瀏覽:56
使用hmailserver搭建郵件伺服器 發布:2025-01-12 16:05:43 瀏覽:809