本文目錄一覽:
- 1、C語言中creatlist的用法
- 2、c語言 creatlist 自定義函數求理解
- 3、C語言鏈表的使用方法
- 4、C語言編寫順序表。為什麼我的修改操作總是修改不了第一位,其他的均可正常運行,程序如下,幫幫忙哈
- 5、C語言編寫學生信息錄入 信息包括學號 姓名 性別 年齡 成績 能實現學生信息的插入 刪除 修改 查詢 儲存等操
C語言中creatlist的用法
1、createlist不是庫函數,一般是數據結構中實現新建一個鏈表的自定義函數。因此沒有什麼用法好說的,關鍵是看自己怎麼定義。
2、常式:
NODE *creatlist(int a[])
{ NODE *h,*p,*q;int i;
h=(NODE *)malloc(sizeof(NODE));
h-next=NULL;
for(i=0;iN;i++)
{q=(NODE *)malloc(sizeof(NODE));
q-data=a[i];
q-next=NULL;
if(h-next==NULL) h-next=p=q;
else {p-next=q;p=q;} }
return h;
}
c語言 creatlist 自定義函數求理解
struct list *createlist(int data[], int n)
{
//輸入一個數組,n是數組的大小,返回一個內容相同的鏈表
struct list *head = 0, *p, *q;//head:鏈表頭
int i;
head = (struct list *) malloc(sizeof(struct list));//建立鏈表頭,分配空間
head-data = data[0];//往鏈表頭填入數據data[0]
p = q = head;//這些是循環變數,p先走,q跟著,倆人從鏈表頭一直走到鏈表尾
//每次循環,p和q一開始指向鏈表末尾的節點上。 p先走,malloc函數改變了他的值,他指向了一塊新的內存空間,就是新的節點;然後q-next=p把新連起來;然後 q跟上p的步伐,q=p,相當於二者又站在了末尾的節點上。
for(i=1; in; i++)
{
p = (struct list *) malloc(sizeof(struct list));//p變成一個新的節點,給p分配空間(注意p的值被改寫了,它不再是head,而是一個新的值,就是下一個節點)
p-data = data[i];//p裝入數據,第一次循環它裝入的是data[1],也就是緊跟著head的那個
q-next = p;//第一次循環q是head,以後每次都是q落後p一個格子。
//第一次循環相當於head-next=p,把第1個節點放在第0個節點後面。
q = p;
//第一次循環q=p,q追上p的腳步,離開head(第0
//第二次循環q=p,p又變成新的節點,相當於把第2個節點(p)放在第一個節點後面
}
p-next = NULL;//封鎖野指針
return head;
}
不懂歡迎追問
C語言鏈表的使用方法
下面的程序是單鏈表的建立與輸出,都有詳細的注釋,相信你能看的懂
但要想學習鏈表必須得掌握了一定的C語言基礎
下面這個鏈表的作用是建立5個結點的單鏈表,5個結點的值輸入以後,依次輸出各個結點的值
#includestdio.h
#includestdlib.h
//鏈表的建立與輸出
struct node//定義結點的類型
{
int num,score;
node*link;
};
void main()
{
node*creat(int n);//函數原型聲明
void print(node*h);//函數原型聲明
node*head=0;//定義鏈頭指針並初始化
head=creat(5);//調用creat函數創建鏈表
print(head);//調用print函數輸出鏈表
}
node*creat(int n)
{
node*h=0,*p,*q;
int i;
for(i=1;i=n;i++)
{
q=(node*)malloc(sizeof(node));//分配一個結點空間
scanf(“%d%d”,q-num,q-score);//輸入新結點的值
q-link=0;//新結點的指針域置0
if(h==0)
h=q;//第一個結點作為鏈頭結點
else
p-link=q;//新結點添加到鏈表的末尾
p=q;
}
return h;//返回鏈頭指針
}
void print(node*h)//鏈表輸出函數的定義
{
while(h)//當指針h非空時輸出h所指結點的值
{
printf(“num=%d\tscore=%d\n”,h-num,h-score);
h=h-link;//使h指向下一個結點
}
}
C語言編寫順序表。為什麼我的修改操作總是修改不了第一位,其他的均可正常運行,程序如下,幫幫忙哈
#include stdio.h
#define MaxSize 100
typedef struct MySequence{
char data[MaxSize];
int length;
} MySeq;
void menu()
{
printf(“本代碼實現順序表的如下幾個基本功能,請選擇對應的功能選項進行相應操作:\n”);
printf(“1.創建順序表\n”);
printf(“2.查找字元\n”);
printf(“3.刪除字元\n”);
printf(“4.插入字元\n”);
printf(“5.修改字元\n”);
printf(“6.顯示所有字元\n”);
printf(“0.退出程序\n”);
}
void SeqInit(MySeq* mys)
{
mys-length = 0;
}
int CreateSeq(MySeq* mys)
{
char c;
printf(“請依次輸入順序表的字元序列,結束請輸入’#’\n”);
while(1)
{
// fflush(stdin); //將這部分去掉,
scanf(“%c”,c);
if(c==’#’)
{
printf(“輸入結束!\n”);
return 0;
}
else if(mys-length==100)
{
printf(“順序表存儲空間已滿,不能繼續輸入。\n”);
return 1;
}
else
{
mys-data[mys-length]=c;
mys-length++;
}
}
return 2;
}
int CHangeList(MySeq* mys)
{
int i,j;
char x;
printf(“請輸入修改後的字元:\n”);
fflush(stdin);
scanf(“%c”,x);
printf(“請輸入要修改的位置:\n”);
fflush(stdin);
scanf(“%d”,i);
if (i0||imys-length) return 0;
else
{
for(j=0;jmys-length;j++)
if(j==i) // 這部分應該改成if(j==i)
{
mys-data[j]=x;
return j;
}
//else return 0; //這部分是最重要的錯誤,刪除。
}
}
int ShowAll(MySeq* mys)
{
int cur=0;
printf(“順序表中的數據依次為:”);
for(cur=0;curmys-length;cur++)
{
printf(“%c”,mys-data[cur]);
}
printf(“\n”);
return 0;
}
void main()
{
MySeq mys;
int choice = 0;
SeqInit(mys);//對順序表進行初始化//
menu();
printf(“本代碼實現順序表的幾個基本功能,請選擇對應的功能選項進行相應操作:”);
fflush(stdin);
scanf(“%d”,choice);
while(1)
{
switch(choice)
{
case 1:
{ if(mys.length!=0)
{
char c;
printf(“順序表已經初始化,再次初始化將清除原有數據。是否繼續 (y/n):”);
fflush(stdin);
scanf(“%c”,c);
while(1)
{
if(c==’y’)
{
mys.length = 0;
fflush(stdin); //每次初始化時,清除緩中取數據。是在函數CreaeSeq()外部、
CreateSeq(mys);
break;
}
else if(c==’n’)
{
break;
}
else
{
printf(“是否繼續 (y/n):”);
fflush(stdin);
scanf(“%c”,c);
}
}
break;
}
else
{
fflush(stdin); // 這兒也是如此
CreateSeq(mys);
break;
}}
case 5:
CHangeList(mys);
break;
case 6:
ShowAll(mys);
break;
case 0:
break;
default:
break;
}
menu();
printf(“本代碼實現順序表的幾個基本功能,請選擇對應的功能選項進行相應操作:”);
fflush(stdin);
scanf(“%d”,choice);
}
}
C語言編寫學生信息錄入 信息包括學號 姓名 性別 年齡 成績 能實現學生信息的插入 刪除 修改 查詢 儲存等操
# include “iostream”
# include “String.h”
using namespace std;
struct List
{
char name[20];
int NO;
};
template class List
struct Node
{
List data;
NodeList *next;
};
template class List
class Student
{
NodeList *head;
public:
Student(int m);
void Setdata(int n);
void PrintStudent();
int Get(char b[]);
void Delete(int i);
void Insert(int i,List item);
void Change(char a[],int num);
~Student();
};
template class List
StudentList::Student(int m)
{
NodeList *r,*s;
head = new NodeList;
r = head;
for (int i = 0;i m;i++)
{
s = new NodeList;
r-next = s;
r = s;
}
r-next = NULL;
}
template class List
void StudentList::Setdata(int n)
{
NodeList *p;
p = head-next;
for(int i = 0;i n;i++)
{
cout”請輸入姓名:”;
cinp-data.name;
cout”請輸入身份證號碼:”;
cinp-data.NO;
p = p-next;
}
}
template class List
void StudentList::PrintStudent()
{
NodeList *p;
p = head-next;
while (p)
{
coutp-data.name”,”p-data.NOendl;
p = p-next;
}
}
template class List
int StudentList::Get(char b[])
{
NodeList *p;
p = head-next;
while(p strcmp(p-data.name,b) != 0)
{
p = p-next;
}
return p-data.NO;
}
template class List
void StudentList::Delete(int i)
{
NodeList *p,*q;
p = head;
int j = 0;
while(p j i-1)
{
p = p-next;
j++;
}
if(!p || !p-next) {cerr”刪除位置非法”;exit(1);}
else
{
List x;
q = p-next;
x = q-data;
p-next = q-next;
delete q;
coutx.name”,”x.NOendl;
}
}
template class List
void StudentList::Insert(int i,List item)
{
NodeList *p,*s;
p = head;
int j = 0;
while (p j i-1)
{
p = p-next;
j++;
}
if(!p) {cerr”插入位置非法”;exit(1);}
else
{
s = new NodeList;
strcpy(s-data.name,item.name);
s-data.NO = item.NO;
s-next = p-next;
p-next = s;
}
}
template class List
void StudentList::Change(char a[],int num)
{
NodeList *p;
p = head-next;
while (p strcmp(p-data.name,a) != 0)
{
p = p-next;
}
p-data.NO = num;
}
template class List
StudentList::~Student()
{
NodeList *p,*q;
p = head;
while (p)
{
q = p;
p = p-next;
delete q;
}
head = NULL;
}
void main()
{
cout”請建立學籍系統”endl;
int m;
cout”請輸入總人數:”;
cinm;
StudentList stu(m);
int n = m;
stu.Setdata(n);
stu.PrintStudent();
int choice;
do
{
cout”********”endl;
cout”1.查詢”endl;
cout”2.刪除”endl;
cout”3.插入”endl;
cout”4.修改”endl;
cout”0.退出”endl;
cout”********”endl;
cout”請輸入您的選擇:”;
cinchoice;
switch(choice)
{
case 1:
{
char b[20];
cout”請輸入需查詢的姓名:”;
cinb;
cout”查詢人的學號為:”;
coutstu.Get(b)endl;
}break;
case 2:
{
int i;
cout”請輸入需刪除數據的位置:”;
cini;
cout”刪除的數據為:”;
stu.Delete(i);
}break;
case 3:
{
List item;
cout”請輸入需插入學生的姓名:”;
cinitem.name;
cout”請輸入需插入學生的學號:”;
cinitem.NO;
int i;
cout”請輸入需插入的位置:”;
cini;
stu.Insert(i,item);
stu.PrintStudent();
}break;
case 4:
{
char a[20];
cout”請輸入需修改人的姓名:”;
cina;
int num;
cout”請輸入修改的新學號:”;
cinnum;
stu.Change(a,num);
stu.PrintStudent();
}break;
case 0:
{
exit(1);
}break;
default:
{
cout”選擇項非法,請重新選擇”;
coutendl;
coutendl;
}
}
} while(choice);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/162636.html